如何修改Google Sheets脚本以删除两个指定列值均为0的行
脚本修改方案
问题原因
你当前脚本的过滤逻辑写反了:原代码里的判断条件val[COLS_TO_SEARCH.n] != DELETE_VAL && val[COLS_TO_SEARCH.y] != DELETE_VAL表示只有N列和Y列都不等于0时才保留该行,所以只要任意一列值为0就会被删除,和你需要的「仅两列均为0时删除行」的需求完全相反。
修改方法
仅需要调整filter方法中的判断逻辑,将「与(&&)」运算符替换为「或(||)」运算符即可,修改后逻辑为:只要N列不为0 或者 Y列不为0,就保留该行,只有两列同时为0时才会被过滤删除。
额外注意:Google Apps Script读取表格后获得的数组索引从0开始计算,你当前设置的n:13对应表格第14列(N列)、y:24对应表格第25列(Y列)匹配正确,如果后续调整搜索列需要对应修改索引值。
修改后完整代码
// Add UI to run script from spreadsheet function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('Clear OI') .addItem('Clear OI', 'removeZeroOI') .addToUi(); } // Delete rows functions function removeZeroOI() { var SS = SpreadsheetApp.openById("mySheetID"); // 替换为你自己的表格ID var SHEET = SS.getSheetByName("OI Test"); var RANGE = SHEET.getDataRange(); var COLS_TO_SEARCH = {n:13, y:24}; // 搜索列N和Y(数组索引从0开始) var DELETE_VAL = 0; // 匹配删除的单元格值 main(); function main() { var deleteSelectedRows = removeFilterSetVals(); }; function removeFilterSetVals() { var rangeVals = RANGE.getValues(); var filteredRange = rangeVals.filter(function(val) { // 修改此处逻辑:只要有一列不为0就保留 return (val[COLS_TO_SEARCH.n] != DELETE_VAL || val[COLS_TO_SEARCH.y] != DELETE_VAL) }); RANGE.clearContent(); var newRange = SHEET.getRange(1, 1, filteredRange.length, filteredRange[0].length); newRange.setValues(filteredRange); }; }
内容的提问来源于stack exchange,提问作者jivers
相关产品推荐
相关产品推荐

