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”列的值修改为字符串值时,我确认输入的值可以附加到最后一行。所以我认为这可能是一个错误。
从以上情况来看,为了达到你的目的,我想提出以下解决方法。
- 使用
sheets.spreadsheets.values.get()
检索最后的行号。
- 使用
sheets.spreadsheets.values.update()
. 将值附加到 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);
});
}
);
参考文献:
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.
当我测试你更新后的图片的传播sheet时,我可以确认你有同样的问题。在这种情况下,当“B”列是数字时,您的问题就出现了。当我将“B”列的值修改为字符串值时,我确认输入的值可以附加到最后一行。所以我认为这可能是一个错误。
从以上情况来看,为了达到你的目的,我想提出以下解决方法。
- 使用
sheets.spreadsheets.values.get()
检索最后的行号。 - 使用
sheets.spreadsheets.values.update()
. 将值附加到 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);
});
}
);