如果“列A”单元格包含给定文本,如何删除Google表格中的行

时间:2016-01-06 21:45:24

标签: google-sheets google-spreadsheet-api

我正在尝试实施Google脚本,以便如果A列中的任何单元格包含任何指定的文本,那么它将删除整个行。这就是我正在使用的......

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('Sheet1'); // change to your own
  var values = s.getDataRange().getValues();

  for (var row in values)
    if (values[row][0] == 'glass')
      s.deleteRow(parseInt(row)+1);

    else if (values[row][0] == 'Glass')
      s.deleteRow(parseInt(row)+1);

};

我将包含多个不同的标准来清理我的电子表格。有些行可能包括“汽车玻璃”,“汽车玻璃”,“玻璃修复”,“玻璃博士”,“玻璃史密斯”等...

目前,此代码会删除列A单元格为“Glass”或“glass”的行。

请帮助!!

2 个答案:

答案 0 :(得分:2)

您必须从最后删除行。如果从头开始并删除一行,则该行下面的所有行现在将与数组中值的顺序不同步。删除第一行后,除非您调整行号的代码,否则删除的所有其他行可能都是错误的行。尝试使用此代码:

function cleanRows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName('Sheet1');

  var colA_Vals = sh.getRange(1, 1, sh.getLastRow(), 1).getValues();

  var i = 0,
      j = 0,
      thisVal,
      chkVal,
      arrayValsToChk = ['glass'];

  for (i=colA_Vals.length;i>0;i-=1) {
    thisVal = colA_Vals[i-1][0];
    //Logger.log('i: ' + i);

    for (j=0;j<arrayValsToChk.length;j+=1) {
      chkVal = arrayValsToChk[j].toLowerCase() //Change to all lower case;

      if (thisVal.indexOf(chkVal) !== -1) {
        ss.deleteRow(i);
      };
    };
  };
};

请注意要检查的所有值的数组。向数组添加新值以检查其他值。

答案 1 :(得分:1)

Sandy当然是如何删除行的。这可能是最重要的一点。我还建议将字符串更改为小写,因此您只需要进行一次测试。试试这个:

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('Sheet1'); // change to your own
  var values = s.getDataRange().getValues();
    for(var i=values.length;i>0;i-=1){
     var lcVal=values[i-1][0].toLowerCase() //Change to all lower case
     var index = lcVal.indexOf("glass"); //now you only have to check for  contains "glass"
     if (lcVal.indexOf("glass") > -1){
     s.deleteRow(i)};
  }}