我正在尝试使用onEdit()简单触发器对Google表格中所有已编辑的单元格执行操作。问题是,如果编辑非相邻单元格的集合,则事件对象仅选取所选的第一个范围。
例如,我有以下代码。如果我在工作表中输入公式或值单元格,脚本会自动将背景颜色更改为红色。
function onEdit(e) {
var range = e.range;
range.setBackgroundRGB(255, 0, 0); //set color to red
}
如果我用鼠标选择多个不相邻的范围(或单元格)并立即更改所有值(例如,如果我从某处复制某个值,并将其粘贴到许多相邻单元格中),则会出现问题立刻)。它不会改变所有背景颜色的脚本,而只会改变所选第一个范围的颜色。
由于
答案 0 :(得分:1)
我们可以从事件对象的range属性中获取活动工作表,但不能从选择中获取,但我们可以使用getSelection和getRangeList。第一个返回一个对象,该对象可用于获取通过getRangeList完成的所选范围引用。
来自https://developers.google.com/apps-script/reference/spreadsheet/selection
的示例var activeSheet = SpreadsheetApp.getActiveSheet();
var rangeList = activeSheet.getRangeList(['A1:B4', 'D1:E4']);
rangeList.activate();
var selection = activeSheet.getSelection();
// Current Cell: D1
Logger.log('Current Cell: ' + selection.getCurrentCell().getA1Notation());
// Active Range: D1:E4
Logger.log('Active Range: ' + selection.getActiveRange().getA1Notation());
// Active Ranges: A1:B4, D1:E4
var ranges = selection.getActiveRangeList().getRanges();
for (var i = 0; i < ranges.length; i++) {
Logger.log('Active Ranges: ' + ranges[i].getA1Notation());
}
Logger.log('Active Sheet: ' + selection.getActiveSheet().getName());