使用 onSelectionChange(e) 触发器检索活动单元格的单元格地址
Retrieving Cell Address of Active Cell with onSelectionChange(e) Trigger
我想创建一个脚本来显示 A1 中活动单元格的单元格地址,但是,事实证明这很困难,因为我什至无法使 Google Apps Script guide 上的 onSelectionChange 示例起作用。每当我 运行 它时,我得到的错误是 TypeError: Cannot read property 'range' of undefined
.
这是代码:
/**
* The event handler triggered when the selection changes in the spreadsheet.
* @param {Event} e The onSelectionChange event.
*/
function onSelectionChange(e) {
// Set background to red if a single empty cell is selected.
var range = e.range;
if(range.getNumRows() === 1
&& range.getNumColumns() === 1
&& range.getCell(1, 1).getValue() === "") {
range.setBackground("red");
}
}
关于你的TypeError: Cannot read property 'range' of undefined
的错误信息,我想你可能直接用脚本编辑器运行实现了onSelectionChange
的功能。如果是这样,就会出现这样的错误,因为没有给出事件对象e
。
onSelectionChange
用作简单触发器。在这种情况下,当您想使用onSelectionChange
触发器检索活动单元格的单元格地址时,请selectGoogle上的单元格传播sheet。这样,脚本就被 onSelectionChange 触发 运行。
示例脚本:
例如,当onSelectionChange触发器是运行通过select单元格时,将单元格地址作为A1Notation放入单元格的示例脚本如下。当您使用该脚本时,请将以下脚本复制粘贴到Spreadsheet的脚本编辑器中并保存。并且,请select一个单元格放在活跃的Spreadsheet.
function onSelectionChange(e) {
var range = e.range;
range.setValue(range.getA1Notation());
}
结果:
当使用上面的脚本时,会得到如下结果。您可以看到,为了 运行 脚本,单元格是 selected.
注:
- 即使您 select 编辑了一个单元格,当示例脚本不是 运行 时,请关闭 Spreadsheet 并再次打开 Spreadsheet。在我的环境中,我确认 onSelectionChange 触发器有效。
参考:
已添加 1 个:
关于以下您的回复,
Thanks. This works and so did the red cell Google example. Although I did have to close the workbook and reopen it to get it to work. How can I set the range to a fixed cell so the active cell address only appears there?
当您只想运行特定范围的脚本时,下面的示例脚本怎么样?从您的回复来看,我使用了您的脚本。
示例脚本:
function onSelectionChange(e) {
var ranges = ["A2:B5", "D2:E5"]; // Please set the range you want to run the script.
var range = e.range;
var sheet = range.getSheet();
var check = ranges.some(r => {
var rng = sheet.getRange(r);
var rowStart = rng.getRow();
var rowEnd = rowStart + rng.getNumRows();
var colStart = rng.getColumn();
var colEnd = colStart + rng.getNumColumns();
return (range.rowStart >= rowStart && range.rowEnd < rowEnd && range.columnStart >= colStart && range.columnEnd < colEnd);
});
if (check) {
range.setBackground("red");
}
}
在这个脚本中,只有当var ranges = ["A2:B5", "D2:E5"]
范围内的单元格是select时,range.setBackground("red")
才是运行。所以请根据您的实际情况修改["A2:B5", "D2:E5"]
。
如果您还想检查sheet名称,请按如下方式修改上面的脚本。在这种情况下,当 sheet ["Sheet2", "Sheet3"]
的 ["A2:B5", "D2:E5"]
范围内的单元格是 selected 时,range.setBackground("red")
是 运行.
function onSelectionChange(e) {
var sheetNames = ["Sheet2", "Sheet3"]; // Please set the sheet names.
var ranges = ["A2:B5", "D2:E5"]; // Please set the range you want to run the script.
var range = e.range;
var sheet = range.getSheet();
if (!sheetNames.includes(sheet.getSheetName())) return;
var check = ranges.some(r => {
var rng = sheet.getRange(r);
var rowStart = rng.getRow();
var rowEnd = rowStart + rng.getNumRows();
var colStart = rng.getColumn();
var colEnd = colStart + rng.getNumColumns();
return (range.rowStart >= rowStart && range.rowEnd < rowEnd && range.columnStart >= colStart && range.columnEnd < colEnd);
});
if (check) {
range.setBackground("red");
}
}
添加了 2 个:
关于以下您的回复,
No, sorry. I meant how can I make the active cell address appear in A1. If I click on cell G5, for example, 'G5' appears in A1.
在那种情况下,下面的示例脚本怎么样?
示例脚本:
function onSelectionChange(e) {
var range = e.range;
range.getSheet().getRange("A1").setValue(range.getA1Notation());
}
我想创建一个脚本来显示 A1 中活动单元格的单元格地址,但是,事实证明这很困难,因为我什至无法使 Google Apps Script guide 上的 onSelectionChange 示例起作用。每当我 运行 它时,我得到的错误是 TypeError: Cannot read property 'range' of undefined
.
这是代码:
/**
* The event handler triggered when the selection changes in the spreadsheet.
* @param {Event} e The onSelectionChange event.
*/
function onSelectionChange(e) {
// Set background to red if a single empty cell is selected.
var range = e.range;
if(range.getNumRows() === 1
&& range.getNumColumns() === 1
&& range.getCell(1, 1).getValue() === "") {
range.setBackground("red");
}
}
关于你的TypeError: Cannot read property 'range' of undefined
的错误信息,我想你可能直接用脚本编辑器运行实现了onSelectionChange
的功能。如果是这样,就会出现这样的错误,因为没有给出事件对象e
。
onSelectionChange
用作简单触发器。在这种情况下,当您想使用onSelectionChange
触发器检索活动单元格的单元格地址时,请selectGoogle上的单元格传播sheet。这样,脚本就被 onSelectionChange 触发 运行。
示例脚本:
例如,当onSelectionChange触发器是运行通过select单元格时,将单元格地址作为A1Notation放入单元格的示例脚本如下。当您使用该脚本时,请将以下脚本复制粘贴到Spreadsheet的脚本编辑器中并保存。并且,请select一个单元格放在活跃的Spreadsheet.
function onSelectionChange(e) {
var range = e.range;
range.setValue(range.getA1Notation());
}
结果:
当使用上面的脚本时,会得到如下结果。您可以看到,为了 运行 脚本,单元格是 selected.
注:
- 即使您 select 编辑了一个单元格,当示例脚本不是 运行 时,请关闭 Spreadsheet 并再次打开 Spreadsheet。在我的环境中,我确认 onSelectionChange 触发器有效。
参考:
已添加 1 个:
关于以下您的回复,
Thanks. This works and so did the red cell Google example. Although I did have to close the workbook and reopen it to get it to work. How can I set the range to a fixed cell so the active cell address only appears there?
当您只想运行特定范围的脚本时,下面的示例脚本怎么样?从您的回复来看,我使用了您的脚本。
示例脚本:
function onSelectionChange(e) {
var ranges = ["A2:B5", "D2:E5"]; // Please set the range you want to run the script.
var range = e.range;
var sheet = range.getSheet();
var check = ranges.some(r => {
var rng = sheet.getRange(r);
var rowStart = rng.getRow();
var rowEnd = rowStart + rng.getNumRows();
var colStart = rng.getColumn();
var colEnd = colStart + rng.getNumColumns();
return (range.rowStart >= rowStart && range.rowEnd < rowEnd && range.columnStart >= colStart && range.columnEnd < colEnd);
});
if (check) {
range.setBackground("red");
}
}
在这个脚本中,只有当
var ranges = ["A2:B5", "D2:E5"]
范围内的单元格是select时,range.setBackground("red")
才是运行。所以请根据您的实际情况修改["A2:B5", "D2:E5"]
。如果您还想检查sheet名称,请按如下方式修改上面的脚本。在这种情况下,当 sheet
["Sheet2", "Sheet3"]
的["A2:B5", "D2:E5"]
范围内的单元格是 selected 时,range.setBackground("red")
是 运行.function onSelectionChange(e) { var sheetNames = ["Sheet2", "Sheet3"]; // Please set the sheet names. var ranges = ["A2:B5", "D2:E5"]; // Please set the range you want to run the script. var range = e.range; var sheet = range.getSheet(); if (!sheetNames.includes(sheet.getSheetName())) return; var check = ranges.some(r => { var rng = sheet.getRange(r); var rowStart = rng.getRow(); var rowEnd = rowStart + rng.getNumRows(); var colStart = rng.getColumn(); var colEnd = colStart + rng.getNumColumns(); return (range.rowStart >= rowStart && range.rowEnd < rowEnd && range.columnStart >= colStart && range.columnEnd < colEnd); }); if (check) { range.setBackground("red"); } }
添加了 2 个:
关于以下您的回复,
No, sorry. I meant how can I make the active cell address appear in A1. If I click on cell G5, for example, 'G5' appears in A1.
在那种情况下,下面的示例脚本怎么样?
示例脚本:
function onSelectionChange(e) {
var range = e.range;
range.getSheet().getRange("A1").setValue(range.getA1Notation());
}