javascript/typescript를 위한 가장 인기 있는 Google Sheets API 래퍼
문서 사이트 - https://theoephraim.github.io/node-google-spreadsheet에서 전체 문서를 볼 수 있습니다.
? 설치 -
pnpm i google-spreadsheet
(또는npm i google-spreadsheet --save
또는yarn add google-spreadsheet
)
다음 예는 수행할 수 있는 작업 중 일부에 대한 아이디어를 제공하기 위한 것입니다.
중요 사항 - 예제를 간결하게 유지하기 위해 일부 이전 버전의 노드에서는 허용되지 않는 최상위 수준에서 wait를 호출합니다. 루트 수준의 스크립트에서 대기를 호출해야 하는데 환경이 이를 지원하지 않는 경우 대신 다음과 같이 비동기 함수로 래핑해야 합니다.
( async function ( ) {
await someAsyncFunction ( ) ;
} ) ( ) ;
import { GoogleSpreadsheet } from 'google-spreadsheet' ;
import { JWT } from 'google-auth-library' ;
// Initialize auth - see https://theoephraim.github.io/node-google-spreadsheet/#/guides/authentication
const serviceAccountAuth = new JWT ( {
// env var values here are copied from service account credentials generated by google
// see "Authentication" section in docs for more info
email : process . env . GOOGLE_SERVICE_ACCOUNT_EMAIL ,
key : process . env . GOOGLE_PRIVATE_KEY ,
scopes : [ 'https://www.googleapis.com/auth/spreadsheets' ] ,
} ) ;
const doc = new GoogleSpreadsheet ( '<the sheet ID from the url>' , serviceAccountAuth ) ;
await doc . loadInfo ( ) ; // loads document properties and worksheets
console . log ( doc . title ) ;
await doc . updateProperties ( { title : 'renamed doc' } ) ;
const sheet = doc . sheetsByIndex [ 0 ] ; // or use `doc.sheetsById[id]` or `doc.sheetsByTitle[title]`
console . log ( sheet . title ) ;
console . log ( sheet . rowCount ) ;
// adding / removing sheets
const newSheet = await doc . addSheet ( { title : 'another sheet' } ) ;
await newSheet . delete ( ) ;
추가 정보:
// if creating a new sheet, you can set the header row
const sheet = await doc . addSheet ( { headerValues : [ 'name' , 'email' ] } ) ;
// append rows
const larryRow = await sheet . addRow ( { name : 'Larry Page' , email : '[email protected]' } ) ;
const moreRows = await sheet . addRows ( [
{ name : 'Sergey Brin' , email : '[email protected]' } ,
{ name : 'Eric Schmidt' , email : '[email protected]' } ,
] ) ;
// read rows
const rows = await sheet . getRows ( ) ; // can pass in { limit, offset }
// read/write row values
console . log ( rows [ 0 ] . get ( 'name' ) ) ; // 'Larry Page'
rows [ 1 ] . set ( 'email' , '[email protected]' ) ; // update a value
rows [ 2 ] . assign ( { name : 'Sundar Pichai' , email : '[email protected]' } ) ; // set multiple values
await rows [ 2 ] . save ( ) ; // save updates on a row
await rows [ 2 ] . delete ( ) ; // delete a row
행 메서드는 데이터 형태에 대해 명시적인 TypeScript 유형을 지원합니다.
type UsersRowData = {
name : string ;
email : string ;
type ?: 'admin' | 'user' ;
} ;
const userRows = await sheet . getRows < UsersRowData > ( ) ;
userRows [ 0 ] . get ( 'name' ) ; // <- TS is happy, knows it will be a string
userRows [ 0 ] . get ( 'badColumn' ) ; // <- will throw a type error
추가 정보:
await sheet . loadCells ( 'A1:E10' ) ; // loads range of cells into local cache - DOES NOT RETURN THE CELLS
console . log ( sheet . cellStats ) ; // total cells, loaded, how many non-empty
const a1 = sheet . getCell ( 0 , 0 ) ; // access cells using a zero-based index
const c6 = sheet . getCellByA1 ( 'C6' ) ; // or A1 style notation
// access everything about the cell
console . log ( a1 . value ) ;
console . log ( a1 . formula ) ;
console . log ( a1 . formattedValue ) ;
// update the cell contents and formatting
a1 . value = 123.456 ;
c6 . formula = '=A1' ;
a1 . textFormat = { bold : true } ;
c6 . note = 'This is a note!' ;
await sheet . saveUpdatedCells ( ) ; // save all updates in one call
추가 정보:
const auth = new JWT ( {
email : process . env . GOOGLE_SERVICE_ACCOUNT_EMAIL ,
key : process . env . GOOGLE_PRIVATE_KEY ,
scopes : [
'https://www.googleapis.com/auth/spreadsheets' ,
// note that sharing-related calls require the google drive scope
'https://www.googleapis.com/auth/drive.file' ,
] ,
} ) ;
// create a new doc
const newDoc = await GoogleSpreadsheet . createNewSpreadsheetDocument ( auth , { title : 'new fancy doc' } ) ;
// share with specific users, domains, or make public
await newDoc . share ( '[email protected]' ) ;
await newDoc . share ( 'mycorp.com' ) ;
await newDoc . setPublicAccessLevel ( 'reader' ) ;
// delete doc
await newDoc . delete ( ) ;
이 모듈은 일반적인 상호작용을 단순화하기 위해 Google API에 대한 직관적인 래퍼를 제공합니다.
Google의 v4 Sheets API는 v3보다 사용하기가 훨씬 쉽지만 공식 googleapis npm 모듈은 모든 Google 제품을 처리하는 거대한 자동 생성 메타 도구입니다. 모듈과 API 자체는 어색하고 문서는 적어도 시작하기에는 매우 형편없습니다.
어떤 상황에서 Google API를 직접 사용해야 하나요?
이 모듈은 인터페이스의 단순성을 절충합니다. Google의 API는 많은 요청을 병렬로 수행하는 메커니즘을 제공하므로 속도와 효율성이 사용 사례에 매우 중요한 경우 해당 API를 직접 사용할 수 있습니다. 아직 여기에 구현되지 않은 API의 덜 사용되는 기능도 많이 있습니다.
이 모듈은 Theo Ephraim이 작성하고 적극적으로 유지 관리합니다.
이 모듈을 상업 프로젝트에 적극적으로 사용하고 있습니까? 지원하고 싶으신가요?
테오에게 맥주를 사다
아직 아무것도 없습니다 - 연락하세요!
기여를 환영하지만 기존 규칙을 따르고, linter를 사용하고, 관련 테스트를 추가하고, 관련 문서를 추가하십시오.
문서 사이트는 docsify를 사용하여 생성됩니다. 편집할 수 있도록 로컬에서 미리 보고 실행하려면 npm run docs:preview
실행하고 http://localhost:3000으로 이동하세요. 콘텐츠는 docs 폴더의 마크다운 파일에 있습니다.
이것은 무료이며 제한이 없는 공개 도메인 소프트웨어입니다. 자세한 내용은 https://unlicense.org를 참조하세요.