我正在使用Google Sheets Client库在电子表格中插入新行,然后在顶部行(但在标题行下方)写入一些数据。
batchUpdate方法应该允许使用它的用户以某种方式组合操作,如果一个操作失败,其他操作也将失败。就我而言,这是最好的选择,因为除非我已经成功地在顶部的第一行插入了新行,否则我不想在第二行插入数据。
但是,我对如何正确使用API尚不了解。结果是在顶部插入了新行,但是只有一个数据点正在写入第一个单元格,而不是该行中的所有5个单元格。这是API调用:
const sheets = google.sheets({ version: 'v4', auth });
sheets.spreadsheets.batchUpdate({
spreadsheetId: SHEET_ID,
"resource": {
"requests": [
{
"insertDimension": {
"range": {
"sheetId": 0,
"dimension": "ROWS",
"startIndex": 1,
"endIndex": 2
},
"inheritFromBefore": false
}
},
{
"updateCells": {
"rows":
{
values: [{
"userEnteredValue": {
stringValue: "Dec 14-Sep 20"
},
"userEnteredValue": {
numberValue: 10
},
"userEnteredValue": {
numberValue: 5
},
"userEnteredValue": {
numberValue: 1
},
"userEnteredValue": {
numberValue: 0.2
},
}]
}
,
"fields": "*",
// "start": {
// "sheetId": 0,
// "rowIndex": 1,
// "columnIndex": 4
// },
"range": {
"sheetId": 0,
"startRowIndex": 1, // I want to write to second row only
"endRowIndex": 2,
"startColumnIndex": 0, // start at first column
"endColumnIndex": 5 // end at 5th column
}
}
}
]
}
}, (err, res) => {
if (err) return console.log('The API returned an error: ' + err);
} else {
console.log('No data found.');
}
});
如您所见,我指定了一个范围,但指定了数据;具体来说,数据数组中的最后一个值0.2正在写入工作表的第一列。我也尝试使用“开始” GridCoordinate而不是“范围” GridRange,但是结果是相同的。
我需要做些什么修改才能将数据数组中的所有5个值一次写入一行,一次写入一列?
答案 0 :(得分:0)
问题不在开始或范围属性中;取而代之的是,问题在于传递到rows数组的对象的格式不正确。
现在,Google确实使使用BatchUpdate修改单元格的API变得相当复杂。首先,在UpdateCellsRequest的文档中,我们看到rows []数组采用了RowData对象。 RowData是一个具有键“值”的对象,其中包含一个CellData对象数组,但是每个CellData对象必须包装在一组{}
中。
然后,CellData对象由一个或多个属性组成,在这种情况下,我们选择“ userEnteredValue”。它包含一个ExtendedValue对象,可以是数字,字符串,布尔值,公式或错误,并且是此复杂嵌套对象系列中的最后一个。
上述代码的问题是,在文档中将rows属性标记为数组,但实际上它是一个包含数组的对象;因此,您在“行”之后丢失了花括号。
这是您应该拥有的:
{
"updateCells": {
"rows":
{
values: [
{
"userEnteredValue": {
stringValue: "Dec 14-Sep 20"
}
},
{
"userEnteredValue": {
numberValue: 10
}
},
{
"userEnteredValue": {
numberValue: 5
}
},
{
"userEnteredValue": {
numberValue: 1
}
},
{
"userEnteredValue": {
numberValue: 0.2
}
}
]
}
,
"fields": "*",
"range": {
"sheetId": 0,
"startRowIndex": 1,
"endRowIndex": 2,
"startColumnIndex": 0,
"endColumnIndex": 5
}
}
}