Der beliebteste Google Sheets API-Wrapper für Javascript/Typescript
Dokumentenseite – Vollständige Dokumente verfügbar unter https://theoephraim.github.io/node-google-spreadsheet
? Installation –
pnpm i google-spreadsheet
(odernpm i google-spreadsheet --save
oderyarn add google-spreadsheet
)
Die folgenden Beispiele sollen Ihnen eine Vorstellung davon geben, was Sie tun können
WICHTIGER HINWEIS – Um die Beispiele prägnant zu halten, rufe ich „await“ auf der obersten Ebene auf, was in einigen älteren Versionen von Node nicht zulässig ist. Wenn Sie „await“ in einem Skript auf der Stammebene aufrufen müssen und Ihre Umgebung dies nicht unterstützt, müssen Sie es stattdessen wie folgt in eine asynchrone Funktion einschließen:
( 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 ( ) ;
Weitere Informationen:
// 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
Zeilenmethoden unterstützen explizite TypeScript-Typen für die Form der Daten
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
Weitere Informationen:
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
Weitere Informationen:
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 ( ) ;
Dieses Modul bietet einen intuitiven Wrapper um die Google-API, um allgemeine Interaktionen zu vereinfachen
Während die Sheets-API der Version 4 von Google viel einfacher zu verwenden ist als die Version 3, ist das offizielle googleapis npm-Modul ein riesiges, automatisch generiertes Metatool, das jedes Google-Produkt verwaltet. Das Modul und die API selbst sind umständlich und die Dokumentation ist ziemlich schrecklich, zumindest für den Anfang.
In welcher Situation sollten Sie die API von Google direkt verwenden?
Dieses Modul geht Kompromisse ein, um die Schnittstelle einfacher zu gestalten. Die API von Google bietet einen Mechanismus, um viele Anfragen parallel zu stellen. Wenn Geschwindigkeit und Effizienz für Ihren Anwendungsfall also äußerst wichtig sind, möchten Sie möglicherweise die API direkt verwenden. Es gibt auch viele weniger genutzte Funktionen ihrer API, die hier noch nicht implementiert sind.
Dieses Modul wurde von Theo Ephraim geschrieben und wird aktiv gepflegt.
Nutzen Sie dieses Modul aktiv für ein kommerzielles Projekt? Möchten Sie dabei helfen, es zu unterstützen?
Kaufe Theo ein Bier
Noch keine – kontaktieren Sie uns!
Beiträge sind willkommen, aber bitte befolgen Sie die bestehenden Konventionen, verwenden Sie den Linter, fügen Sie relevante Tests hinzu und fügen Sie relevante Dokumentation hinzu.
Die Dokumentenseite wird mit docsify generiert. Um eine Vorschau anzuzeigen und lokal auszuführen, damit Sie Änderungen vornehmen können, führen Sie npm run docs:preview
aus und gehen Sie zu http://localhost:3000. Der Inhalt befindet sich in Markdown-Dateien im Ordner docs.
Dabei handelt es sich um kostenlose und unbelastete Public-Domain-Software. Weitere Informationen finden Sie unter https://unlicense.org.