答案:
您需要使用 batchUpdate 来执行此操作。
请求示例:
{
"requests": [
{
"deleteDimension": {
"range": {
"sheetId": sheetId,
"dimension": "ROWS",
"startIndex": 0,
"endIndex": 1
}
}
}
]
}
上述请求将从具有给定 gid 的工作表中删除第一行。
这些行是 0 索引的,因此从 0 开始到 1 结束将删除第一行。同样,从 8 开始到 18 结束将删除第 9-18 行。
方法如下:
gapi.client.sheets.spreadsheets.batchUpdate(resource)
注意:这是spreadsheets.batchUpdate 和不是 spreadsheets.values.batchUpdate。
现在齐心协力:
const resource = {
"requests": [
{
"deleteDimension": {
"range": {
"sheetId": sheetId,
"dimension": "ROWS",
"startIndex": 0,
"endIndex": 1
}
}
}
]
}
const response = gapi.client.sheets.spreadsheets.batchUpdate({
"spreadsheetId": "your-spreadsheet-id",
"resource": resource
})
.then(function(response) {
console.log("Response is: \n", response)
}, function(err) {
console.error("Execute error", err)
})
为了获得哪些行是空白的,您必须使用spreadsheets.values.get 并手动循环响应。
响应将采用以下形式;您将需要遍历response.values:
{
"range": "Sheet1!A1:Z1000",
"majorDimension": "ROWS",
"values": [
[] // each row is an array
]
}
在此示例中,我使用的电子表格如下所示:
对于此电子表格,response 将是:
{
"range": "Sheet1!A1:Z1000",
"majorDimension": "ROWS",
"values": [
[ "1", "1", "1", "1", "1", "1", "1", "1", "1", "1" ],
[ "2", "2", "2", "2", "2", "2", "2", "2", "2", "2" ],
[ "3", "3", "3", "3", "3", "3", "3", "3", "3", "3" ],
[ "4", "4", "4", "4", "4", "4", "4", "4", "4", "4" ],
[],
[ "6", "6", "6", "6", "6", "6", "6", "6", "6", "6" ],
[],
[],
[ "9", "9", "9", "9", "9", "9", "9", "9", "9", "9" ],
[ "10", "10", "10", "10", "10", "10", "10", "10", "10", "10" ],
]
}
所以我们只需要检查response.result.values 的哪些元素是空数组:
假设电子表格的列最多为 ZZZ,因此要封装整个范围,您可以提出请求:
const emptyRows = []
gapi.client.sheets.spreadsheets.values.get({
"spreadsheetId": "your-spreadsheet-id",
"range": "A:ZZZ"
})
.then(function(response) {
response.result.values.forEach(function(row, index) {
if (row.length == 0) emptyRows.push(index)
})
}, function(err) {
console.error("Execute error", err)
})
然后循环遍历这个数组向后,将值传递到前面的batchUpdate 请求中以将它们从工作表中完全删除。重要的是从下往上删除,以免更改行号并意外删除包含数据的行。
注意:这不会删除最后一个数据行之后的空行,只会删除数据集中的空行。
参考资料: