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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:10:29