Google Apps Script如何基于参考表循环更新多个命名范围
首先我了解到不使用命名范围和脚本也有实现方案,但Google Docs的导入范围功能无法兼容这类方案,因此需要通过脚本实现需求。
我当前编写的脚本已接近可用,但缺乏GAS基础循环的编写能力。我已将电子表格中与脚本相关的区域标为蓝色。
我希望在特定单元格被编辑时触发以下操作:
- 从指定工作表的指定单元格区域中读取命名范围列表
- 使用同工作表相邻单元格区域存储的范围地址,更新对应命名范围的指向
我明白单独调用setNamedRange()的用法,但不知道如何基于表格区域实现循环操作。我希望该功能可扩展,方便后续直接增加需要更新的范围数量。
我最初编写的逐行更新代码如下:
function updateRanges() { var ss = SpreadsheetApp.getActive(); //range1 var updateRangeName = ss.getRange("B14").getValue(); var updateRangeValue = ss.getRange("C14").getValue(); ss.setNamedRange(updateRangeName,ss.getRange(updateRangeValue)); //range2 var updateRangeName = ss.getRange("B15").getValue(); var updateRangeValue = ss.getRange("C15").getValue(); ss.setNamedRange(updateRangeName,ss.getRange(updateRangeValue)); //range3 var updateRangeName = ss.getRange("B16").getValue(); var updateRangeValue = ss.getRange("C16").getValue(); ss.setNamedRange(updateRangeName,ss.getRange(updateRangeValue)); //range4 var updateRangeName = ss.getRange("B17").getValue(); var updateRangeValue = ss.getRange("C17").getValue(); ss.setNamedRange(updateRangeName,ss.getRange(updateRangeValue)); //range5 var updateRangeName = ss.getRange("B18").getValue(); var updateRangeValue = ss.getRange("C18").getValue(); ss.setNamedRange(updateRangeName,ss.getRange(updateRangeValue)); } // function onEdit(e) { if (e.range.getA1Notation() === 'C2') updateRanges(); }
更新说明
感谢Yuri的帮助,我已得到可用解决方案,最终代码如下,我额外调整了onEdit触发器,使其仅在指定工作表触发:
function updateRanges() { var ss = SpreadsheetApp.getActive(); sheet = ss.getSheetByName("Template") var ranges = sheet.getRange('B14:C18').getValues(); for (var r in ranges) { var updateRangeName = ranges[r][0]; var updateRangeValue = ranges[r][1]; ss.setNamedRange(updateRangeName,ss.getRange(updateRangeValue)); } } function onEdit(e) { if (e.range.getSheet().getName() != "onEditSheet") { return } if (e.range.getA1Notation() === 'B1') updateRanges(); }
内容的提问来源于stack exchange,提问作者Adam Shapira
相关产品推荐
相关产品推荐

