我试图从工作表INPUT中读取一个单元格并检查它是否存在于工作表STORAGE(只有一列)中。如果找到,则需要将其删除。如果找到该字符串,脚本可以终止。我已经编写了一些似乎在理论上可以工作的代码,但是在我尝试使用它的六分钟之后就出现了。
我已经尝试过设置它,以便循环只迭代一次,但它似乎仍然卡在某处。这是我的代码:
var active_spreadsheet = SpreadsheetApp.getActive();
var sheet_input = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('INPUT');
var sheet_storage = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('STORAGE');
var last_row_counter = 0;
function findAndRemove() {
last_row_counter = sheet_storage.getLastRow();
var n = 1;
while (n <= last_row_counter) {
if (sheet_input.getRange("B2").getValue() == sheet_storage.getRange(n,1)) {
sheet_storage.deleteRow(n);
n = last_row_counter;
}
n = n++;
}
答案 0 :(得分:0)
布赖恩,
看看这是否运行得更好:
function findAndRemove() {
var ss = SpreadsheetApp.getActive(),
valToFind = ss.getSheetByName('INPUT')
.getRange('B2')
.getValue(),
sheetToCheck = ss.getSheetByName('STORAGE'),
values = sheetToCheck.getRange('A2:A')
.getValues();
for (var i = 0, l = values.length; i < l; i++) {
if (values[i][0] == valToFind) {
sheetToCheck.deleteRow(i + 2);
break;
}
}
}
正如您所提到的,代码将在第一次找到值后退出。我使用col A作为需要搜索的列(更改为适合)。如您所见,此代码在一次调用中获取该列的所有值,然后遍历它以查看是否找到匹配项。
答案 1 :(得分:0)
我从哪里开始?!
我建议您在运行循环之前将sheet_input.getRange("B2").getValue()
存储在变量中,因为这意味着脚本只需要查询一次值,而不是每行一次。
在javascript中n++
已经意味着&#34;将n增加1&#34;即:n=n+1;
,因此作业超出了顶部。只需使用:n++;
在这种情况下,最好使用for循环,因为它包括起始编号,结束条件和增量一体机;一些信息Here
主要问题是当您进行比较sheet_input.getRange("B2").getValue() == sheet_storage.getRange(n,1)
时,您要将值"hello"
与CELL进行比较,而不是将其值进行比较。所以你需要sheet_storage.getRange(n,1).getValue()
代替。
而不是人为地说&#34;如果找到匹配的值,则删除该行,然后将行计数增加到max&#34;要停止循环,只需使用退出循环的break;
clause。
我强烈建议您提供某种提示,让用户知道功能何时完成,以及是否有效。请参阅课程Browser.msgBox()
这是我的代码:
var active_spreadsheet = SpreadsheetApp.getActive();
var sheet_input = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('INPUT');
var sheet_storage = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('STORAGE');
function findAndRemove() {
var comapreValue = sheet_input.getRange("B2").getValue();
var last_row_counter = sheet_storage.getLastRow();
var sum_of_deleted_rows = 0;
for (var n = 1; n <= last_row_counter; n++) {
if (comapreValue == sheet_storage.getRange(n,1).getValue()) {
sheet_storage.deleteRow(n);
sum_of_deleted_rows++;
// break; //if you would like to stop after just one row is removed, un-comment this line
}
}
Browser.msgBox(sum_of_deleted_rows + " row(s) deleted");
}