我正在尝试使用node.js
和Google Sheets API v4
在电子表格的中间插入一个空行。过去几天,我一直在到处进行研究,但是找不到任何相关文档。
Google Spreadsheet文档只讨论.append()
,它会在电子表格的末尾附加一行。这不是我想要的哈哈。
甚至有没有办法在数据中间插入一个空行?
所以..这是我到目前为止编辑的内容。
function newRow() {
return new Promise((resolve, reject) => {
return getAuthorizedClient().then(client => {
const sheets = google.sheets({
version: 'v4',
auth: client
});
var requests = [];
requests.push({
insertDimension: {
range: {
sheetId: MY_SHEET_ID,
dimension: 'row',
startIndex: 50,
endIndex: 1
},
inheritFromBefore: false
}
});
var batchUpdateRequest = { requests: requests };
sheets.spreadsheets.values.batchUpdate({
spreadsheetId: CONFIG_SHEET_ID,
resource: batchUpdateRequest
});
});
});
}
getAuthorizedClient
是我为身份验证创建的功能。反正我来的问题是错误:接收到无效的JSON有效负载。未知名称“ requests”:找不到字段。
我不太确定自己在做什么错-我直接从Google API文档中进行跟踪。
最佳答案
根据Sheets API参考,要插入行,您需要发送带有有效InsertDimensionRequest
属性的DimensionRange
。
确实,您的代码的这一部分是正确的:
{
insertDimension: {
range: {
sheetId: MY_SHEET_ID,
dimension: 'row',
startIndex: 50,
endIndex: 1
},
inheritFromBefore: false // Use start (true) or end (false) index to set defaults.
}
}
(尽管我相信您希望将结束索引设为
51
而不是1
。然后将在第50个索引处插入一行,其中第1行是索引0。)从错误信息
错误:接收到无效的JSON有效负载。未知名称“ requests”:找不到字段。
我们可以确定您的特定
batchUpdate
请求有误。句法。请注意,Sheets API中有多个实现batchUpdate
方法的类:spreadsheets.batchUpdate
和spreadsheets.values.batchUpdate
。仅对于batchUpdate
资源的spreadsheets
方法而言,输入数组Requests
是有效参数-values
资源的批量更新需要一个data
参数(即,将值写入目标对象细胞)。因此,解决方法是更改用于构造
batchUpdate
请求的类:function newRow(sheets, config, options) {
var newRowRequest = {
insertDimension: {
range: {
sheetId: options.sheetId,
dimension: 'row',
startIndex: options.start,
endIndex: options.start + options.howMany
},
inheritFromBefore: options.inheritBefore
}
};
var batchUpdateRequest = {
requests: [newRowRequest]
// includeSpreadsheetInResponse: ...,
// responseRanges: [...],
// responseIncludeGridData: ...
};
return sheets.spreadsheets.batchUpdate({
spreadsheetId: config.spreadsheetId,
resource: batchUpdateRequest
}); // Returns AxiosPromise
}
Node.js API reference for Sheets REST API。
spreadsheets.batchUpdate
spreadsheets.values.batchUpdate