使用Google脚本的batchUpdate命令的语法



我正在使用Google Script和电子表格,但似乎无法获得所需内容。

到目前为止,我正在从API检索数据,并将其附加到列表的末尾。然而,现在我正在进行优化,只添加新的数据。

我是这样的:

  1. 检测需要添加的新行数
  2. 在开头添加新数据

我通过在文档开头添加新行(只要我有新元素就行(并用获得的数据更新这些新行来实现这一点。然而,我无法完成最后一部分。

我找不到Google Sheets API v4与Google Script的正确语法示例,很难看出哪里出错了。

现在我有以下内容:

insertRowsInSheet(sheet.cases.id, newDocuments.length, data);

其中:

  1. sheet.cases.id:这是电子表格的id
  2. newDocuments.length:这是我需要添加的新行数
  3. data:这是一个具有新字段的数组

该方法调用一个执行以下操作的函数:

function insertRowsInSheet(sheetId, size, data) {
try {
const response = Sheets.Spreadsheets.batchUpdate({
"requests": [
{
"insertDimension": {
"range": {
"sheetId": sheetId,
"dimension": "ROWS",
"startIndex": 1,
"endIndex": size+1
},
"inheritFromBefore": false,
}
},
{
"updateCells": {
rows: {
values: [
["test", "test"],
["test2", "test2"]] 
},
fields: "*",
range: {
sheetId: sheetId,
startRowIndex: 1,
startColumnIndex: 1,
}
}
}
]}, sheet.id);
Logger.log(response);
} catch (error) {
Logger.log(`error: ${error}`);
}
}

由于batchUpdate只有在两种方法都有效的情况下才有效,我现在得到以下错误:

error: GoogleJsonResponseException: API call to sheets.spreadsheets.batchUpdate failed with error: Invalid value at 'requests[1].update_cells.rows.values[0]' (type.googleapis.com/google.apps.sheets.v4.CellData), "test"

我知道第一部分是有效的,因为如果我只运行第一个requests,它会输入与我有新元素一样多的行。所以我从

测试1
AB
1测试1
2测试2测试2

在您的脚本中,我认为需要修改请求体的updateCells

修改的脚本:

spreadsheetId = "###"; // Please set Spreadsheet ID.
sheetId = "###"; // Please set Sheet ID.
data = [["test", "test"], ["test2", "test2"]]; // This is from your showing script.
const response = Sheets.Spreadsheets.batchUpdate({
requests: [
{
insertDimension: {
range: { sheetId: sheetId, startIndex: 1, endIndex: 1 + data.length, dimension: "ROWS" }
}
},
{
updateCells: {
range: { sheetId: sheetId, startRowIndex: 1, endRowIndex: 1 + data.length },
rows: data.map(e => ({ values: e.map(f => ({ userEnteredValue: (isNaN(f) || f == "" ? { stringValue: f } : { numberValue: f }) })) })),
fields: "userEnteredValue"
}
}
]
}, spreadsheetId);

或者,当使用电子表格服务(SpreadsheetApp(时,示例脚本如下。

const data = [["test", "test"], ["test2", "test2"]]; // This is from your showing script.
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); // Please set sheet name.
const length = data.length;
sheet.insertRowsAfter(1, length).getRange(2, 1, length, data[0].length).setValues(data);
  • 在上述两个脚本中,data长度的行从第2行插入,data的值放入插入的行中

参考文献:

  • 方法:spreadsheets.batchUpdate
  • 更新单元格请求
  • insertRowsAfter(afterPosition,howMany(

最新更新