在工作表中搜索字符串并在找到时将其删除

时间:2015-06-18 02:23:51

标签: function google-apps-script google-sheets range google-apps

我试图从工作表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++;
  }  

2 个答案:

答案 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)

我从哪里开始?!

  1. 我建议您在运行循环之前将sheet_input.getRange("B2").getValue()存储在变量中,因为这意味着脚本只需要查询一次值,而不是每行一次。

  2. 在javascript中n++已经意味着&#34;将n增加1&#34;即:n=n+1;,因此作业超出了顶部。只需使用:n++;

  3. 在这种情况下,最好使用for循环,因为它包括起始编号,结束条件和增量一体机;一些信息Here

  4. 主要问题是当您进行比较sheet_input.getRange("B2").getValue() == sheet_storage.getRange(n,1)时,您要将值"hello"与CELL进行比较,而不是将其值进行比较。所以你需要sheet_storage.getRange(n,1).getValue()代替。

  5. 而不是人为地说&#34;如果找到匹配的值,则删除该行,然后将行计数增加到max&#34;要停止循环,只需使用退出循环的break; clause

  6. 我强烈建议您提供某种提示,让用户知道功能何时完成,以及是否有效。请参阅课程Browser.msgBox()

  7. 上的信息

    这是我的代码:

    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");
    }