如何用Apps Script在单元格公式含指定文本时删除行?
修改Apps Script代码以同时检查单元格值和公式内容
原代码使用getValues()仅获取单元格的计算结果值,无法检测单元格公式本身是否包含指定字符串。要同时检查值和公式,需要结合getFormulas()方法获取公式内容,以下是修改后的代码:
function deleteRows() { var sheet = SpreadsheetApp.getActiveSheet(); var dataRange = sheet.getDataRange(); var values = dataRange.getValues(); var formulas = dataRange.getFormulas(); // 获取所有单元格的公式内容 var numRows = dataRange.getNumRows(); var rowsDeleted = 0; // 从后往前遍历,避免删除行后索引错乱,逻辑更稳定 for (var i = numRows - 1; i >= 0; i--) { var cellValue = values[i][0]; var cellFormula = formulas[i][0]; // 检查值是否包含目标字符串,或者公式存在且包含目标字符串 var shouldDelete = cellValue.includes('bedroom') || (cellFormula && cellFormula.includes('bedroom')); if (shouldDelete) { sheet.deleteRow(i + 1 - rowsDeleted); rowsDeleted++; } } };
关键修改说明
- 新增
formulas = dataRange.getFormulas():获取整个数据区域的公式数组,无公式的单元格对应值为空字符串 - 调整遍历方向为从后往前:原代码从前往后遍历会因行删除导致后续索引偏移,反向遍历可彻底避免这个问题
- 更新判断逻辑:同时验证单元格的显示值和公式内容是否包含目标字符串,
cellFormula &&用于规避空字符串调用includes()的报错
内容的提问来源于stack exchange,提问作者Karim
相关产品推荐
相关产品推荐

