我正在尝试使用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文档。
答案 0 :(得分:0)
根据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
}
答案 1 :(得分:-2)
Google Apps脚本文档非常适合这类事情。
https://developers.google.com/apps-script/reference/spreadsheet/sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
// This inserts a row after the first row position.
sheet.insertRowAfter(1);