wrapper ของ Google ชีต API ยอดนิยมสำหรับ javascript / typescript
ไซต์เอกสาร - เอกสารฉบับเต็มมีอยู่ที่ https://theoephraim.github.io/node-google-spreadsheet
- การติดตั้ง -
pnpm i google-spreadsheet
(หรือnpm i google-spreadsheet --save
หรือyarn add google-spreadsheet
)
ตัวอย่างต่อไปนี้มีไว้เพื่อให้คุณเข้าใจถึงบางสิ่งที่คุณสามารถทำได้
หมายเหตุสำคัญ - เพื่อให้ตัวอย่างกระชับ ฉันกำลังเรียก await ที่ระดับบนสุดซึ่งไม่ได้รับอนุญาตในโหนดเวอร์ชันเก่าบางเวอร์ชัน หากคุณต้องการเรียก await ในสคริปต์ที่ระดับรูทและสภาพแวดล้อมของคุณไม่รองรับ คุณต้องล้อมมันไว้ในฟังก์ชัน async แทน ดังนี้:
( 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 ( ) ;
โมดูลนี้มี wrapper ที่ใช้งานง่ายรอบๆ API ของ Google เพื่อลดความซับซ้อนของการโต้ตอบทั่วไป
แม้ว่า API ชีต v4 ของ Google จะใช้งานได้ง่ายกว่า v3 มาก แต่โมดูล googleapis npm อย่างเป็นทางการเป็นเครื่องมือเมตาที่สร้างอัตโนมัติขนาดยักษ์ที่จัดการ ผลิตภัณฑ์ Google ทุกรายการ โมดูลและ API นั้นค่อนข้างอึดอัด และเอกสารก็ค่อนข้างแย่มาก อย่างน้อยก็ในการเริ่มต้น
คุณควรใช้ API ของ Google โดยตรงในสถานการณ์ใด
โมดูลนี้ทำการแลกเปลี่ยนเพื่อความเรียบง่ายของอินเทอร์เฟซ API ของ Google มีกลไกในการส่งคำขอจำนวนมากพร้อมกัน ดังนั้นหากความเร็วและประสิทธิภาพมีความสำคัญอย่างยิ่งต่อกรณีการใช้งานของคุณ คุณอาจต้องการใช้ API ของพวกเขาโดยตรง นอกจากนี้ยังมีคุณลักษณะที่ใช้งานน้อยจำนวนมากของ API ที่ยังไม่ได้นำมาใช้ที่นี่
โมดูลนี้เขียนและได้รับการดูแลโดย Theo Ephraim
คุณใช้งานโมดูลนี้เพื่อโครงการเชิงพาณิชย์หรือไม่? ต้องการที่จะช่วยสนับสนุนมัน?
ซื้อเบียร์ให้ธีโอ
ยังไม่มี - ติดต่อได้เลย!
ยินดีให้การสนับสนุน แต่โปรดปฏิบัติตามแบบแผนที่มีอยู่ ใช้ linter เพิ่มการทดสอบที่เกี่ยวข้อง และเพิ่มเอกสารที่เกี่ยวข้อง
ไซต์เอกสารถูกสร้างขึ้นโดยใช้ docsify หากต้องการดูตัวอย่างและเรียกใช้ในเครื่องเพื่อให้คุณสามารถแก้ไขได้ ให้เรียกใช้ npm run docs:preview
และไปที่ http://localhost:3000 เนื้อหาอยู่ในไฟล์ markdown ในโฟลเดอร์ docs
นี่เป็นซอฟต์แวร์สาธารณสมบัติฟรีและไม่มีภาระผูกพัน สำหรับข้อมูลเพิ่มเติม โปรดดู https://unlicense.org