在现有数据中间插入一行
Insert a row in the middle of existing data
我正在尝试使用 node.js
和 Google Sheets API v4
在电子表格中间插入一个空行。这几天我到处研究,但找不到任何关于它的文档。
Google 电子表格文档仅讨论 .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
是我为auth做的一个函数。不管怎样,我遇到的问题是
Error: Invalid JSON payload received. Unknown name "requests": Cannot find field.
我不太确定我做错了什么 - 我直接从 Google API 文档中获取信息。
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);
根据表格 API 参考,要插入行,您需要发送 InsertDimensionRequest
with a valid DimensionRange
属性.
确实,您的这部分代码是正确的:
{
insertDimension: {
range: {
sheetId: MY_SHEET_ID,
dimension: 'ROWS',
startIndex: 50,
endIndex: 1
},
inheritFromBefore: false // Use start (true) or end (false) index to set defaults.
}
}
(尽管我相信您希望结束索引为 51
而不是 1
。然后会在第 50 个索引处插入一行,其中第 1 行是索引 0。)
来自错误信息
Error: Invalid JSON payload received. Unknown name "requests": Cannot find field.
我们可以确定您的特定 batchUpdate
请求不正确。句法。请注意,工作表 API 中有多个 class 实现了 batchUpdate
方法:spreadsheets.batchUpdate
and spreadsheets.values.batchUpdate
。只有 spreadsheets
资源的 batchUpdate
方法是一个输入数组 Requests
一个有效参数 - values
资源的批量更新需要一个 data
参数(即要写入目标单元格的值)。
因此,解决方法是更改用于构造 batchUpdate
请求的 class:
function newRow(sheets, config, options) {
var newRowRequest = {
insertDimension: {
range: {
sheetId: options.sheetId,
dimension: 'ROWS',
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
和 Google Sheets API v4
在电子表格中间插入一个空行。这几天我到处研究,但找不到任何关于它的文档。
Google 电子表格文档仅讨论 .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
是我为auth做的一个函数。不管怎样,我遇到的问题是
Error: Invalid JSON payload received. Unknown name "requests": Cannot find field.
我不太确定我做错了什么 - 我直接从 Google API 文档中获取信息。
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);
根据表格 API 参考,要插入行,您需要发送 InsertDimensionRequest
with a valid DimensionRange
属性.
确实,您的这部分代码是正确的:
{
insertDimension: {
range: {
sheetId: MY_SHEET_ID,
dimension: 'ROWS',
startIndex: 50,
endIndex: 1
},
inheritFromBefore: false // Use start (true) or end (false) index to set defaults.
}
}
(尽管我相信您希望结束索引为 51
而不是 1
。然后会在第 50 个索引处插入一行,其中第 1 行是索引 0。)
来自错误信息
Error: Invalid JSON payload received. Unknown name "requests": Cannot find field.
我们可以确定您的特定 batchUpdate
请求不正确。句法。请注意,工作表 API 中有多个 class 实现了 batchUpdate
方法:spreadsheets.batchUpdate
and spreadsheets.values.batchUpdate
。只有 spreadsheets
资源的 batchUpdate
方法是一个输入数组 Requests
一个有效参数 - values
资源的批量更新需要一个 data
参数(即要写入目标单元格的值)。
因此,解决方法是更改用于构造 batchUpdate
请求的 class:
function newRow(sheets, config, options) {
var newRowRequest = {
insertDimension: {
range: {
sheetId: options.sheetId,
dimension: 'ROWS',
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
}