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
相关产品推荐
相关产品推荐

