Google Apps Script实现选中单个单元格自动扩展至列末非空单元格执行加减
修改Google Apps Script的moreLess脚本:自动扩展单列选中范围
核心修改思路
当检测到选中区域是单列单个单元格时,自动将处理范围扩展至该列最后一个非空单元格;若选中的是多单元格区域,则保持原逻辑直接处理选中范围。
修改后的完整脚本
function moreLessAdd() { processRange(true); } function moreLessSubtract() { processRange(false); } function processRange(isAdd) { const ss = SpreadsheetApp.getActiveSpreadsheet(); const targetSheet = ss.getActiveSheet(); const sumSheet = ss.getSheetByName('sommaire_redac'); if (!sumSheet) { SpreadsheetApp.getUi().alert('未找到名为"sommaire_redac"的工作表'); return; } const valueToAdjust = sumSheet.getRange('M2').getValue(); if (typeof valueToAdjust !== 'number') { SpreadsheetApp.getUi().alert('sommaire_redac!M2不是有效数字'); return; } let selectedRange = targetSheet.getActiveRange(); // 检测是否为单列单个单元格 if (selectedRange.getNumRows() === 1 && selectedRange.getNumColumns() === 1) { const col = selectedRange.getColumn(); const startRow = selectedRange.getRow(); // 获取该列最后非空行 const lastRow = targetSheet.getLastRow(); // 从选中行到最后非空行构建新范围 selectedRange = targetSheet.getRange(startRow, col, lastRow - startRow + 1, 1); } const values = selectedRange.getValues(); const adjustedValues = values.map(row => { const cellValue = row[0]; return typeof cellValue === 'number' ? [isAdd ? cellValue + valueToAdjust : cellValue - valueToAdjust] : [cellValue]; // 非数字单元格保持原样 }); selectedRange.setValues(adjustedValues); }
关键代码说明
- 范围扩展逻辑:通过
selectedRange.getNumRows() === 1 && selectedRange.getNumColumns() === 1判断是否为单个单元格,再用targetSheet.getLastRow()获取列末非空行,重新构建处理范围。 - 数值校验:提前校验
sommaire_redac!M2是否为有效数字,避免非数值导致的错误。 - 原逻辑保留:多单元格选中时,直接沿用原脚本的批量处理逻辑,不影响原有使用习惯。
内容的提问来源于stack exchange,提问作者Seb Mainguet
相关产品推荐
相关产品推荐

