Google Apps Script 如何获取电子表格手动选中的单元格范围引用
问题原因
你代码中调用setActiveSheet(ss.getSheets()[1])强制切换工作表的操作,会重置目标工作表的默认选中范围为A1单元格,直接覆盖了你之前在表格界面选中的行数据,这是返回结果错误的核心原因。
另外如果你直接在Apps Script编辑器后台运行脚本,没有表格前端的交互上下文,也会默认返回A1单元格的选中结果。
修正后的代码
function cancelBooking() { const ss = SpreadsheetApp.getActiveSpreadsheet(); Logger.log('Spreadsheet: ' + ss.getName()); const targetSheetName = 'Booking Database'; // 直接获取当前用户激活的工作表,不做强制切换操作 const currentSheet = ss.getActiveSheet(); // 校验操作工作表是否正确,不需要限制操作表可以删除这段校验逻辑 if (currentSheet.getName() !== targetSheetName) { SpreadsheetApp.getUi().alert(`请切换到「${targetSheetName}」工作表后再运行脚本`); return; } Logger.log('Sheet: ' + currentSheet.getName()); // 获取选中范围 const activeRange = currentSheet.getActiveRange(); Logger.log('选中范围起始行号:' + activeRange.getRow()); Logger.log('选中范围总行数:' + activeRange.getNumRows()); Logger.log('选中范围A1标识:' + activeRange.getA1Notation()); // 示例:获取选中整行的所有数据 if (activeRange.getNumColumns() === currentSheet.getMaxColumns()) { const rowData = activeRange.getValues()[0]; Logger.log('选中行数据:' + JSON.stringify(rowData)); } }
运行注意事项
- 不要在Apps Script代码编辑器中直接点击运行按钮,需要将脚本绑定到表格的自定义菜单/插入的绘图按钮,在表格界面选中目标行后点击触发脚本,才能正常获取选中范围。
- 如果需要支持选中多行批量处理,遍历
activeRange.getValues()返回的二维数组即可。
内容的提问来源于stack exchange,提问作者PhilTilson
相关产品推荐
相关产品推荐

