You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheet删除空行脚本误删公式与格式如何修复?

解决方案

问题原因

你原有脚本的逻辑是先提取所有单元格的纯值,清空整个工作表后再写入过滤后的值,这种操作必然会丢失所有公式、单元格格式、数据验证、注释等原有配置。

优化后代码

function deleteEmptyRows(){ 
  var sh = SpreadsheetApp.getActiveSheet();
  var data = sh.getDataRange().getValues();
  // 倒序遍历行,避免删除行后行号偏移导致的漏删问题
  for(var n = data.length - 1; n >= 0; n--){
    // 判断当前行是否为全空行
    var isEmptyRow = data[n].join('').replace(/,/g,'') === '';
    if(isEmptyRow){
      // 数组索引从0开始,工作表行号从1开始,所以要+1
      sh.deleteRow(n + 1);
    }
  }
}

逻辑说明

  • 采用倒序遍历的方式删除行,不会因为前面的行被删除后,后续行号偏移出现漏删的情况
  • 仅删除判定为空的行,其余行的公式、格式、内容都完全保留,不会被修改
  • 如果你不需要删除最后一行有数据的行下方的空行,仅删除夹在有数据的行之间的空行,可以用以下调整后的版本:
    function deleteBetweenEmptyRows(){ 
      var sh = SpreadsheetApp.getActiveSheet();
      var data = sh.getDataRange().getValues();
      // 先找到最后一个非空行的索引
      var lastNonEmptyRowIndex = 0;
      for(var i = 0; i < data.length; i++){
        if(data[i].join('').replace(/,/g,'') !== ''){
          lastNonEmptyRowIndex = i;
        }
      }
      // 仅遍历有数据的行的区间,删除中间的空行
      for(var n = lastNonEmptyRowIndex - 1; n >= 0; n--){
        var isEmptyRow = data[n].join('').replace(/,/g,'') === '';
        if(isEmptyRow){
          sh.deleteRow(n + 1);
        }
      }
    }
    

内容的提问来源于stack exchange,提问作者Dima Bur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:30:05