【发布时间】:2021-09-06 08:38:41
【问题描述】:
首先,我意识到有一些方法可以在不使用命名范围和脚本的情况下做到这一点。遗憾的是,Google Docs 导入的范围强烈反对,所以我需要找到一种方法来完成这项工作。
我想我已经快完成这个脚本了,但我缺乏 GAS 中基本循环的编码知识。我用蓝色突出显示了与脚本和shared an example at this link有关的电子表格的相关部分:
在编辑特定单元格时,我希望发生以下情况:
- 从特定电子表格的一系列单元格中获取命名范围列表
- 从同一电子表格中的相邻单元格范围更新那些命名范围的范围
我理解一个一个地使用 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();
}
更新 1
感谢 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();
}
【问题讨论】:
标签: javascript google-apps-script google-sheets named-ranges