Google apps script 由多个范围内的编辑触发的OneEdit(e)
我有一个脚本,它可以清除几个命名范围内的值(如果它们被编辑)。我成功地将OnEdit(e)触发器配置为在编辑单个命名范围时触发,但无法确定如何将其展开以在编辑任何范围时触发。 我想我可以为指定的范围设置几个变量(例如,MyRange2、MyRange3等),但在这种情况下,我需要为我试图避免的每个变量复制IF语句 我还试图将myRange定义为数组,但它似乎与以下条件相矛盾:Google apps script 由多个范围内的编辑触发的OneEdit(e),google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个脚本,它可以清除几个命名范围内的值(如果它们被编辑)。我成功地将OnEdit(e)触发器配置为在编辑单个命名范围时触发,但无法确定如何将其展开以在编辑任何范围时触发。 我想我可以为指定的范围设置几个变量(例如,MyRange2、MyRange3等),但在这种情况下,我需要为我试图避免的每个变量复制IF语句 我还试图将myRange定义为数组,但它似乎与以下条件相矛盾: var myRange=[ss.getRangeByName('total1')、ss.getRangeByName('
var myRange=[ss.getRangeByName('total1')、ss.getRangeByName('total2')、ss.getRangeByName('total3')代码>
函数onEdit(e){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var myRange=SpreadsheetApp.getActiveSheet().getRange('total1');
var row=e.range.getRow();
var col=e.range.getColumn();
如果(col>=myRange.getColumn()&&col=myRange.getRow()&&row解释:
- 确保充分利用。您希望花费尽可能少的资源,并将每次编辑时要执行的所有绝对必要的代码放在可以结束代码执行的主
if
条件之前。例如var myRange=SpreadsheetApp.getActiveSheet().getRange('total1')
不需要为每次编辑执行
- 我假设您要为特定的工作表运行脚本。在我的代码中,我使用了
Sheet1
,并添加了if
条件来检查您编辑的工作表是否为Sheet1
。如果您不希望出现这种行为,请删除此if
条件和括起来的括号if(as.getName()=“Sheet1”)
。然后,您的代码将自动适用于文档中的每个工作表(只要此工作表中的名称范围符合您的标准)
- 定义命名范围的名称列表
[“total1”、“total2”、“total3”]
,脚本将迭代所有命名范围,并确保仅针对这些命名范围执行代码块
- 如果上述所有
If
条件的计算结果为true
,请清除名称范围的内容
解决方案:
函数onEdit(e){
常数arng=e.range;///获取活动范围
const as=arng.getSheet();//获取活动工作表
如果(如.getName()=“Sheet1”){
const nranges=[“total1”、“total2”、“total3”];//在此处添加范围的名称
//让我们获取活动单元格的行和列索引
const namedRanges=as.getNamedRanges();//获取所有命名范围
常量行=arng.getRow();
const col=arng.getColumn();
namedRanges.forEach(nr=>{
if(nranges.includes(nr.getName())){
设nrange=nr.getRange();
如果(col>=nrange.getColumn()&&col=nrange.getRow()&&row解释:
- 确保充分利用。您希望花费尽可能少的资源,并将每次编辑时要执行的所有绝对必要的代码放在可以结束代码执行的主
if
条件之前。例如var myRange=SpreadsheetApp.getActiveSheet().getRange('total1')
不需要为每次编辑执行
- 我假设您要为特定的工作表运行脚本。在我的代码中,我使用了
Sheet1
,并添加了if
条件来检查您编辑的工作表是否为Sheet1
。如果您不希望出现这种行为,请删除此if
条件和括起来的括号if(as.getName()=“Sheet1”)
。然后,您的代码将自动适用于文档中的每个工作表(只要此工作表中的名称范围符合您的标准)
- 定义命名范围的名称列表
[“total1”、“total2”、“total3”]
,脚本将迭代所有命名范围,并确保仅针对这些命名范围执行代码块
- 如果上述所有
If
条件的计算结果为true
,请清除名称范围的内容
解决方案:
函数onEdit(e){
常数arng=e.range;///获取活动范围
const as=arng.getSheet();//获取活动工作表
如果(如.getName()=“Sheet1”){
const nranges=[“total1”、“total2”、“total3”];//在此处添加范围的名称
//让我们获取活动单元格的行和列索引
const namedRanges=as.getNamedRanges();//获取所有命名范围
常量行=arng.getRow();
const col=arng.getColumn();
namedRanges.forEach(nr=>{
if(nranges.includes(nr.getName())){
设nrange=nr.getRange();
如果(col>=nrange.getColumn()&&col=nrange.getRow()&&row
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var myRange = SpreadsheetApp.getActiveSheet().getRange('total1');
var row = e.range.getRow();
var col = e.range.getColumn();
if (col >= myRange.getColumn() && col <= myRange.getLastColumn() && row >= myRange.getRow() && row <= myRange.getLastRow()) {
var name_arr = ['total1', 'total2', 'total3'];
for (var name of name_arr) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = ss.getRangeByName(name).clearContent();
} ;
} else {
return;
}
};
function onEdit(e) {
const arng = e.range; // // get active range
const as = arng.getSheet(); // get active sheet
if(as.getName()=="Sheet1"){
const nranges = ["total1","total2","total3"]; // add here the names of the ranges
//Let's get the row & column indexes of the active cell
const namedRanges = as.getNamedRanges(); // get all named ranges
const row = arng.getRow();
const col = arng.getColumn();
namedRanges.forEach(nr=>{
if (nranges.includes(nr.getName())){
let nrange = nr.getRange();
if (col >= nrange.getColumn() && col <= nrange.getLastColumn()
&& row >= nrange.getRow() && row <= nrange.getLastRow()) {
nrange.clearContent(); // clear the range of the named range
}
}
});
}
}