如果行在 Google App 脚本中的特定列有空值,如何快速删除行

How to delete rows fast if they have empty values at specific columns in Google App Script

下面的代码检查 [G, H, J] 列的单元格是否为空,并删除条件为真的行。 尽管如此,下面代码的运行时间非常慢,每 1500 table 个条目需要大约 15 分钟。 有什么办法可以优化吗? 我可以对满足以下条件的行进行哈希处理,然后一次性删除它们吗?

P.S:可以在此处找到原始代码https://gist.github.com/dDondero/285f8fd557c07e07af0e,我根据我的用例对其进行了调整。

function deleteRows() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var rows = sheet.getDataRange();
    var lastRow =sheet.getRange(1,1).getDataRegion(SpreadsheetApp.Dimension.ROWS).getLastRow() + 1;
    var values = rows.getValues();
    var row;
    var rowsDeleted = 0;
    for (var i = 0; i < lastRow; i++) {
      row = values[i];
      if (row[9] == '' && row[7] == '' && row[6] == ''
     ) {
        sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
        rowsDeleted++;
      }
    }
  }

尝试:

function DeleteEmptyRows() {

  const sheet = SpreadsheetApp.getActiveSheet()
  const values = sheet.getDataRange()
                      .getValues()
                      .filter(row => row[9] !== '' && row[7] !== '' && row[6] !== '')

  sheet.getDataRange().clearContent()

  return sheet.getRange(1, 1, values.length, values[0].length)
              .setValues(values)                      

}

如果您有任何附加到行的背景颜色,请告诉我,我可以为您进行调整。

此代码将过滤掉所有包含指定空单元格的行,清除 sheet,然后设置值。

删除行

function deleteRows() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getActiveSheet();
  const rg = sh.getDataRange();
  const vs = rg.getValues().filter(r => !(!r[6] || !r[7] || !r[9]));
  rg.clearContent();
  sh.getRange(1, 1, vs.length, vs[0].length).setValues(vs);
}