如何将新的 Sheet 添加到现有的 SpreadSheet 中? Google Sheets API 和 Node.js

How to add a new Sheet into existing SpreadSheet? Google Sheets API with Node.js

将Google-Sheets-API用于Node.js,我将如何以编程方式add/create将新 Sheet 添加到现有电子表格中?

它看起来像 Google 的 Sheets API docs don't specify a method for creating a new sheet. The only operation you can perform on a Sheet is the copyTo method,它将一个电子表格的 Sheet 复制到另一个电子表格中。

如果它确实存在,它可能会通过 POST 请求 /v4/spreadsheets/{spreadsheetId}/sheets 来完成,但同样,它没有记录在案,如果您可能无法使用试过了。

这实际上是可能的,并记录在 Spreadsheets/batchUpdate/Requests#AddSheetRequest

authorize(JSON.parse(clientSecretContent), (auth) => {
    const sheets = google.sheets({ version: 'v4', auth });
    const request = {
        // The ID of the spreadsheet
        "spreadsheetId": spreadsheetId,
        "resource": {
            "requests": [{
               "addSheet": {
                    // Add properties for the new sheet
                    "properties": {
                        // "sheetId": number,
                        // "title": sheetTitleSting,
                        // "index": number,
                        // "sheetType": enum(SheetType),
                        // "gridProperties": {
                        //     object(GridProperties)
                        // },
                        // "hidden": boolean,
                        // "tabColor": {
                        //     object(Color)
                        // },
                        // "rightToLeft": boolean
                    }
                }
            }]
        }
    };

    sheets.spreadsheets.batchUpdate(request, (err, response) => {
        if (err) {
            // TODO: Handle error
        } else {
            // TODO: Handle success
        }
    });
});

可以使用 batchUpdate 和 addSheet https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/batchUpdate

示例:

const sheetname = 'my sheetname'
const client = new google.auth.JWT(
    client_email,
    null,
    private_key,
    ['https://www.googleapis.com/auth/spreadsheets'],
    null
)

const jwt = await new Promise((resolve, reject) => {
    client.authorize((err, tokens) => {
        if (err) {
            reject(err);
        } else {
            google.options({
                auth: client
            });
            resolve();
        }
    });
});

const sheets = await google.sheets('v4');

try {
    const request = {
        spreadsheetId: spreadsheetId,  
        resource: {
            requests: [{
                addSheet: {
                    properties: {
                        title: sheetname
                    }
                }
            }],  
        },
        auth: client,
    };

    const resp = await sheets.spreadsheets.batchUpdate(request)
} catch (error) {
    console.log(error)
}

对于后代股份,这里有一个基于承诺的 (async/await) 表格 API 示例,说明如何将 sheet(制表符)添加到价差 sheet。

await api.spreadsheets.batchUpdate ({ 
          spreadsheetId: spreadsheetId, 
          resource: {requests: [ {addSheet: {properties: {title: tabName }}}]}});

一个完整的例子

async function addSheet (auth, spreadsheetId, tabName) {
    const api = google.sheets({version: 'v4', auth: auth});
    try {
      // Only add sheet if it doesn't already exist
      if ((await api.spreadsheets.get({spreadsheetId: spreadsheetId})).data.sheets
        .filter(sheet => sheet.properties.title === tabName).length === 0) {
        await api.spreadsheets.batchUpdate ({ 
          spreadsheetId: spreadsheetId, 
          resource: {requests: [ {addSheet: {properties: {title: tabName }}}]}});
      }
    } catch (err) {
      console.log('Sheets API Error: ' + err);
    }
}