Le wrapper d'API Google Sheets le plus populaire pour javascript/typescript
Site de documentation - Documents complets disponibles sur https://theoephraim.github.io/node-google-spreadsheet
? Installation -
pnpm i google-spreadsheet
(ounpm i google-spreadsheet --save
ouyarn add google-spreadsheet
)
Les exemples suivants sont destinés à vous donner une idée de certaines des choses que vous pouvez faire
REMARQUE IMPORTANTE - Pour que les exemples restent concis, j'appelle wait au niveau supérieur, ce qui n'est pas autorisé dans certaines anciennes versions de node. Si vous devez appeler wait dans un script au niveau racine et que votre environnement ne le prend pas en charge, vous devez plutôt l'envelopper dans une fonction asynchrone comme ceci :
( 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 ( ) ;
Plus d'informations :
// 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
Les méthodes de ligne prennent en charge les types TypeScript explicites pour la forme des données
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
Plus d'informations :
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
Plus d'informations :
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 ( ) ;
Ce module fournit un wrapper intuitif autour de l'API de Google pour simplifier les interactions courantes
Bien que l'API v4 Sheets de Google soit beaucoup plus facile à utiliser que la v3, le module officiel googleapis npm est un méta-outil géant généré automatiquement qui gère tous les produits Google . Le module et l'API elle-même sont maladroits et la documentation est plutôt terrible, du moins pour commencer.
Dans quelle situation faut-il utiliser directement l'API de Google ?
Ce module fait des compromis pour la simplicité de l'interface. L'API de Google fournit un mécanisme permettant d'effectuer de nombreuses requêtes en parallèle. Par conséquent, si la vitesse et l'efficacité sont extrêmement importantes pour votre cas d'utilisation, vous souhaiterez peut-être utiliser leur API directement. Il existe également de nombreuses fonctionnalités moins utilisées de leur API qui ne sont pas encore implémentées ici.
Ce module a été écrit et est activement maintenu par Theo Ephraim.
Utilisez-vous activement ce module pour un projet commercial ? Vous voulez contribuer à le soutenir ?
Acheter une bière à Théo
Pas encore – contactez-nous !
Les contributions sont les bienvenues, mais veuillez suivre les conventions existantes, utiliser le linter, ajouter des tests pertinents et ajouter de la documentation pertinente.
Le site de documentation est généré à l'aide de docsify. Pour prévisualiser et exécuter localement afin de pouvoir apporter des modifications, exécutez npm run docs:preview
et accédez à http://localhost:3000. Le contenu se trouve dans des fichiers markdown dans le dossier docs.
Il s'agit d'un logiciel du domaine public gratuit et sans contrainte. Pour plus d'informations, consultez https://unlicense.org.