根据单元格内的值删除行,优化
Delete rows based on values within cell, optimising
我有脚本 运行ning 每周从文档中删除行,然后将这些值粘贴到另一个 sheet 进行数据分析,但是随着文档的增长(+20,0000 行) 我的脚本超时。无论如何,如何优化脚本以更快地使用更少的 processing/memory 和 运行?
var rowsDeleted = 0;
for (var i = 0; i <= numRows - 1; i++) {
var row = values[i];
if (row[0] == 'delete' || row[0] == '') {
data.deleteRow((parseInt(i)+1) - rowsDeleted);
rowsDeleted++;
}
}
尝试
var result = values.filter(row => row[0] !== 'delete' && row[0] !== '');
var rowsDeleted = values.length - result.length;
针对你的情况,我理解如下。
- 有很多行被删除了。
- 行没有继续。因此必须使用
deleteRow()
. 逐行删除行
如果我的理解是正确的,这个修改怎么样?
修改点:
- 使用 Sheets 的 batchUpdate API。
- 通过使用 Sheets API,一次 API 调用即可删除离散行。
- 创建已删除行的列表作为表格的请求正文API。
- 使用请求正文通过 Sheets API 的 batchUpdate 删除行。
要使用表格 API,请在高级 Google 服务和 API 控制台中启用表格 API。关于如何启用它们,请查看.
修改脚本:
var spreadsheetId = "#####"; // Please input spreadsheet ID.
var sheetId = "#####"; // Please input sheet ID.
var deleteRows = [];
for (var i = values.length - 1; i >= 0; i--) {
if (values[i] == "delete" || values[i] == "") {
deleteRows.push({
"deleteRange": {
"shiftDimension": "ROWS",
"range": {
"startRowIndex": i,
"endRowIndex": i + 1,
"sheetId": sheetId
}
}
});
}
}
Sheets.Spreadsheets.batchUpdate({"requests": deleteRows}, spreadsheetId);
注:
- 在这个修改后的脚本中,它假定从 Spreadsheet 中检索到的值在
values
. 中
- 在你运行这个之前,请输入spreadsheetID和sheet你要删除的行的ID。
如果这不是您想要的结果,我很抱歉。
我有脚本 运行ning 每周从文档中删除行,然后将这些值粘贴到另一个 sheet 进行数据分析,但是随着文档的增长(+20,0000 行) 我的脚本超时。无论如何,如何优化脚本以更快地使用更少的 processing/memory 和 运行?
var rowsDeleted = 0;
for (var i = 0; i <= numRows - 1; i++) {
var row = values[i];
if (row[0] == 'delete' || row[0] == '') {
data.deleteRow((parseInt(i)+1) - rowsDeleted);
rowsDeleted++;
}
}
尝试
var result = values.filter(row => row[0] !== 'delete' && row[0] !== '');
var rowsDeleted = values.length - result.length;
针对你的情况,我理解如下。
- 有很多行被删除了。
- 行没有继续。因此必须使用
deleteRow()
. 逐行删除行
如果我的理解是正确的,这个修改怎么样?
修改点:
- 使用 Sheets 的 batchUpdate API。
- 通过使用 Sheets API,一次 API 调用即可删除离散行。
- 创建已删除行的列表作为表格的请求正文API。
- 使用请求正文通过 Sheets API 的 batchUpdate 删除行。
要使用表格 API,请在高级 Google 服务和 API 控制台中启用表格 API。关于如何启用它们,请查看
修改脚本:
var spreadsheetId = "#####"; // Please input spreadsheet ID.
var sheetId = "#####"; // Please input sheet ID.
var deleteRows = [];
for (var i = values.length - 1; i >= 0; i--) {
if (values[i] == "delete" || values[i] == "") {
deleteRows.push({
"deleteRange": {
"shiftDimension": "ROWS",
"range": {
"startRowIndex": i,
"endRowIndex": i + 1,
"sheetId": sheetId
}
}
});
}
}
Sheets.Spreadsheets.batchUpdate({"requests": deleteRows}, spreadsheetId);
注:
- 在这个修改后的脚本中,它假定从 Spreadsheet 中检索到的值在
values
. 中
- 在你运行这个之前,请输入spreadsheetID和sheet你要删除的行的ID。
如果这不是您想要的结果,我很抱歉。