【发布时间】:2021-06-21 09:26:46
【问题描述】:
以下函数根据特定值/项目删除 Google 工作表中的行,我希望修改它以删除要删除的项目数组。
原函数
//GLOBALS
var spreadSheet = SpreadsheetApp.openById("SHEET ID");
var DELETE_VAL = ["Item_to_delete 1", "Item_to_delete 2", "Item_to_delete 3"]
var COL_TO_SEARCH = 5; // The column to search for the DELETE_VAL (Zero is first)
function deleteEachRow(sheetName){
var SHEET = spreadSheet.getSheetByName(sheetName);
var RANGE = SHEET.getDataRange();
var rangeVals = RANGE.getValues();
//Reverse the 'for' loop.
for(var i = rangeVals.length-1; i >= 0; i--){
if(rangeVals[i][COL_TO_SEARCH] === DELETE_VAL){
SHEET.deleteRow(i+1);
};
};
};
// Invoke deleteEachRow() for each sheet you want to delete the rows
["SHEET 1", "SHEET 2", "SHEET N"].forEach((sheetName) => deleteEachRow(sheetName))
我尝试传递一个遍历每个项目的 for 循环,但它会引发错误:
//GLOBALS
var spreadSheet = SpreadsheetApp.openById("SHEET ID");
var DELETE_VAL = ["Item_to_delete 1", "Item_to_delete 2", "Item_to_delete 3"]
var COL_TO_SEARCH = 7; // The column to search for the DELETE_VAL (Zero is first)
function deleteEachRow(sheetName){
var SHEET = spreadSheet.getSheetByName(sheetName);
var RANGE = SHEET.getDataRange();
var rangeVals = RANGE.getValues();
//Reverse the 'for' loop.
for(var i = rangeVals.length-1; i >= 0; i--){
for(var i = DELETE_VAL.length; i >=0; i++){
if(rangeVals[i][COL_TO_SEARCH] === DELETE_VAL[i]){
SHEET.deleteRow(i+1);
};
};
};
};
// Invoke deleteEachRow() for each sheet you want to delete the rows
["SHEET 1", "SHEET 2", "SHEET N"].forEach((sheetName) => deleteEachRow(sheetName));
TypeError: 无法读取未定义的属性“7”
意味着它不再读取 rangeVals 变量。
我也试过
.
.
.
// Invoke deleteEachRow() for each sheet you want to delete the rows
for(var i = DELETE_VAL.length; i >=0; i++){
["SHEET 1", "SHEET 2", "SHEET N"].forEach((sheetName) => deleteEachRow(sheetName));
};
但这只是无限期地执行,直到超时。
我知道我肯定有一些逻辑缺陷,但我快到了,请帮助。 我对 .js/.gs 的了解很少。
我又试了一次。
function deleteEachRow(sheetName){
var SHEET = spreadSheet.getSheetByName(sheetName);
var RANGE = SHEET.getDataRange();
var rangeVals = RANGE.getValues();
//Reverse the 'for' loop.
for(var i = rangeVals.length-1; i >= 0; i--){
for(var j = DELETE_VAL.length; j >=0; j--){
if(rangeVals[i][COL_TO_SEARCH] === DELETE_VAL[j]){
SHEET.deleteRow(j+1);
};
};
};
};
【问题讨论】:
-
感谢您为使其发挥作用所做的努力!只要您不放弃就不要担心-我们可以说出来。需要注意的一件事是,您正在运行从 DELETE_VAL.length 到 0 的循环,并递增 i 的值。我猜你想减少它,对吧?让我们从这个开始。如果有任何错误,请发布确切的错误。
-
您在外部和内部循环中声明了相同的 var i。为内部循环索引使用不同的字母,例如 j。
-
我已将我的函数更新为如下所示,但行为很奇怪 - 删除的行数超过了指定的行数。
-
请看我上次的编辑,代码看起来很糟糕。
标签: javascript arrays google-apps-script google-sheets