Google 开发人员工作表 API 附加函数将行附加到 table 的第一行而不是在末尾附加

Google Sheets for Developers Sheets API append function appending row to first row of table instead of appending at the end

const { google } = require('googleapis');
const sheets = google.sheets('v4');
var request = {
    spreadsheetId: triggerDoc.parameters.spreadSheetId,
    range: sheetName + "!A:Z",
    insertDataOption: "INSERT_ROWS",
    responseDateTimeRenderOption: "SERIAL_NUMBER",
    responseValueRenderOption: "FORMATTED_VALUE",
    valueInputOption: "USER_ENTERED",
    "includeValuesInResponse": true,
    resource: {
        values: rowsToInsert
    },
    auth: oAuth2Client,
};
sheets.spreadsheets.values.append(request, function (err, response) {
    resp.spreadsheets = true;
    if (err) {
        console.log(err);
        return callback(err);
    }
    // console.log(response);
    return callback();
});

我正在使用上面的代码将一组值追加到 google sheet 中,该值被追加但不是追加结束,而是被添加到第一行,因为google sheet 没有正确识别 table 范围。

当我从 Developer Tool google sheet 触发 API 识别 table 并开始将值附加到 table.

这里的值不是按照 API 触发的顺序追加的。

当我测试你更新后的图片的传播sheet时,我可以确认你有同样的问题。在这种情况下,当“B”列是数字时,您的问题就出现了。当我将“B”列的值修改为字符串值时,我确认输入的值可以附加到最后一行。所以我认为这可能是一个错误。

从以上情况来看,为了达到你的目的,我想提出以下解决方法。

  1. 使用 sheets.spreadsheets.values.get() 检索最后的行号。
  2. 使用 sheets.spreadsheets.values.update().
  3. 将值附加到 sheet 的最后一行

当此解决方法反映到您的脚本中时,它将变成如下。

修改后的脚本:

sheets.spreadsheets.values.get(
  {
    spreadsheetId: triggerDoc.parameters.spreadSheetId,
    range: sheetName + "!A:Z",
    auth: oAuth2Client,
  },
  (err, { data }) => {
    if (err) {
      console.log(err);
      return;
    }
    const row = data.values.length + 1;
    var request = {
      spreadsheetId: triggerDoc.parameters.spreadSheetId,
      range: sheetName + "!A" + row,
      responseDateTimeRenderOption: "SERIAL_NUMBER",
      responseValueRenderOption: "FORMATTED_VALUE",
      valueInputOption: "USER_ENTERED",
      includeValuesInResponse: true,
      resource: {
        values: rowsToInsert,
      },
      auth: oAuth2Client,
    };
    sheets.spreadsheets.values.update(request, (err, { data }) => {
      if (err) {
        console.log(err);
        return;
      }
      console.log(data);
    });
  }
);

参考文献: