我在一个电子表格文件中的不同Google表格上有多个命名范围。我希望我的Google-apps-script代码能够识别用户点击了哪些范围。
我知道如何在用户单击的活动单元格中获取值,但是我不知道如何获取其地址(行和列)。即使获得行和列,我如何知道哪个RANGE包含该单元格?
[我什至没有任何代码。]
我没有实际结果。我想要的是 范围= activeCell.parentRange(是否有执行此功能的功能?)
答案 0 :(得分:0)
电子表格没有onClick事件。但是,您可以确定正在编辑哪个命名范围。您将必须为InstallonEdit安装和onEdit触发器,并且不要忘记输入e。
function InstallibleonEdit(e) {
sh=e.range.getSheet();
if(sh.getName()!="Sheet162"){return;}//You will probably want to change this sheet name
var cell={row:e.range.rowStart,column:e.range.columnStart};
var rA=isInNamedRanges(cell);
if(rA) {
var html=rA.join(', ');
var userInterface=HtmlService.createHtmlOutput(html);
SpreadsheetApp.getUi().showModelessDialog(userInterface, 'In these ranges');
}
}
function isInNamedRanges(cell) {
var ss=SpreadsheetApp.getActive();
var nrgs=ss.getNamedRanges();
var inrgs=[];
for(var i=0;i<nrgs.length;i++) {
var rg=nrgs[i].getRange();
var columnStart=rg.getColumn();
var rowStart=rg.getRow();
var columnEnd=columnStart + rg.getWidth() - 1;
var rowEnd=rowStart + rg.getHeight() -1;
var range={left:columnStart,right:columnEnd,top:rowStart,bottom:rowEnd};
if(isCellInRange(cell,range)) {
inrgs.push(nrgs[i].getName());
}
}
return inrgs;
}
function isCellInRange(cell,range) {
if(cell.row>=range.top && cell.row<=range.bottom && cell.column>=range.left && cell.column<=range.right) {
return true;
}else{
return false;
}
}
诚然,这有点长,但应作为示例。您很可能希望删除对话框,这是强制要求安装触发器的原因。这还将检测多个重叠的命名范围。
这是我的工作表的样子。我更改了命名范围的背景。
您可以检测到复选框的单击,因为该操作还将执行编辑。因此,如果您在范围内包括复选框,则可以检测到用户单击它们。