【问题标题】:Script deleting all formulas in the Google Sheet, how to fix?脚本删除谷歌表格中的所有公式,如何修复?
【发布时间】:2021-10-28 19:07:47
【问题描述】:

我有工作表 A 和工作表 B,工作表 A 中的数据符合我的标准,我使用公式在工作表 B 上复制。由于某些数据不符合我的标准,我得到一个空行。

**问题陈述**

我有一个脚本,我打算用它来删除工作表上的空行。但我注意到它会同时删除所有公式和所有格式。

我只需要删除非空行之间的行。比如第1,2行有数据,第5行有数据,所以只需要删除第3-4行,这个过程应该是自动的。

代码

    function deleteEmptyRows(){ 
          var sh = SpreadsheetApp.getActiveSheet();
          var data = sh.getDataRange().getValues();
          var targetData = new Array();
          for(n=0;n<data.length;++n){
            if(data[n].join().replace(/,/g,'')!=''){ targetData.push(data[n])};
            Logger.log(data[n].join().replace(/,/g,''))
          }
          sh.getDataRange().clear();
          sh.getRange(1,1,targetData.length,targetData[0].length).setValues(targetData);
        }

【问题讨论】:

  • 您能否提供一份不含敏感信息的电子表格副本?

标签: javascript google-sheets rowdeleting


【解决方案1】:

我没有看到你的数据样本,也不知道你的工作表是什么样子,所以这里只是另一个猜测:

function deleteEmptyRows() {
  const sh = SpreadsheetApp.getActiveSheet();
  const data = sh.getDataRange().getValues();
  const empty_rows = [];
  for (let i in data) if (data[i].join('') == '') empty_rows.push(+i+1);
  empty_rows.reverse().forEach(x => sh.deleteRow(x));
}

更新

查找最后一行的函数变体包含可见数据并删除上面所有空(没有可见数据)行:


function delete_all_empty_rows_above_the_last_filled_row() {
  const sh = SpreadsheetApp.getActiveSheet();

  const data_all = sh.getDataRange().getValues();
  for (var last_row = data_all.length-1; last_row>0; last_row--) {
    if (data_all[last_row].join('') != '') break;
  }
  
  const data = sh.getRange(1,1,last_row+1,3).getValues();
  const empty_rows = [];
  for (let i in data) if (data[i].join('') == '') empty_rows.push(+i+1);
  empty_rows.reverse().forEach(x => sh.deleteRow(x));
}

更新 2

要使函数每次都在“A”列中的“IF Copy”表上发生更改时进行归档,您需要添加如下内容:

function onEdit(e) {
  if (e.range.getSheet().getName() != "IF Copy") return;
  if (e.range.columnStart == 1) 
    delete_all_empty_rows_above_the_last_filled_row();
}

onEdit() 触发器仅在您手动编辑工作表时有效。如果工作表通过某些公式或其他函数发生更改,则触发器不起作用。

【讨论】:

  • 我试过你的脚本,不幸的是它删除了工作表中的所有空行。我只需要删除非空行之间的行。例如第 1,2 行有数据,第 5 行有数据。因此,只需要删除第 3-4 行。
  • 抱歉,您做错了什么。我的脚本正是这样做的:如果第 3 行和第 4 行是空的,它将删除它们。相信我,我已经编写脚本很长时间了,删除空行是一项非常常见的任务。可能您的意思是“行有数据”和“空行”不常见。只需出示您的工作表:1) 您拥有的和 2) 您想要拥有的。
  • 谢谢,我在另一个工作表上试过了,它可以工作。请建议如何将脚本设置为自动运行?因为当新的空行出现时,它不会对更改做出反应..
  • 实施很大程度上取决于工作流程。空行在您的工作表上究竟是如何出现的?有人插入新的空行吗?还是有人清除现有非空行中的单元格?还是有一些触发器可以追加或更改行?
  • 你好。我尝试在编辑触发器上使用,但它删除了空售中的所有公式。请告知如何修复 (docs.google.com/spreadsheets/d/…)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
相关资源
最近更新 更多