Google Sheets Apps Script:限定特定区域实现累计求和
如何限制cumulativeSum函数仅在特定单元格区域运行?
我编写了一个cumulativeSum函数用于计算累计求和,解决了「Exception: You do not have permission to call setValue」权限错误后,该函数会对所有单元格生效。现需将其限定在特定区域(如B1:B20)内运行,请问该如何实现?
我的原始代码:
function cumulativeSum() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var currentCell = sheet.getCurrentCell(); if (currentCell) { var resultCellValue = currentCell.offset(0, 1).getValue() + currentCell.getValue(); var resultCell = currentCell.offset(0, 1); resultCell.setValue(resultCellValue); } }
修改后的代码(限定B1:B20区域)
function cumulativeSum() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var currentCell = sheet.getCurrentCell(); if (!currentCell) return; // 定义目标区域:B列(列索引2,SpreadsheetApp行列从1开始计数),行1到20 const targetCol = 2; const minRow = 1; const maxRow = 20; // 获取当前单元格的行、列位置 const cellRow = currentCell.getRow(); const cellCol = currentCell.getColumn(); // 仅在目标区域内执行求和逻辑 if (cellCol === targetCol && cellRow >= minRow && cellRow <= maxRow) { var resultCellValue = currentCell.offset(0, 1).getValue() + currentCell.getValue(); var resultCell = currentCell.offset(0, 1); resultCell.setValue(resultCellValue); } }
关键说明
- 利用
getRow()和getColumn()获取当前单元格的位置,SpreadsheetApp中行列索引均从1开始,所以B列对应索引2。 - 添加位置判断条件,只有当前单元格落在B1:B20范围内时,才触发累计求和操作;不在目标区域时函数直接退出,不执行任何操作。
- 提前判断
!currentCell直接返回,避免后续逻辑出错。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

