google-apps-script - 如何确定用户点击了哪个命名范围
问题描述
我在单个电子表格文件中的不同 Google 工作表上有几个命名范围。我希望我的 Google-apps-script 代码能够辨别用户点击了哪些范围。
我知道如何获取用户单击的活动单元格中的值,但我不知道如何获取其地址(行和列)。即使我得到了行和列,我怎么知道哪个 RANGE 包含该单元格?
[我没有任何接近的代码。]
我没有实际结果。我想要的是 range = activeCell.parentRange 之类的东西(有没有这样做的函数?)
解决方案
电子表格没有 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;
}
}
诚然,这有点啰嗦,但应该作为一个例子。您很可能希望删除强制要求安装触发器的对话框。这还将检测多个重叠的命名范围。
这就是我的床单的样子。我更改了命名范围的背景。
您可以检测到复选框的单击,因为该操作也会执行编辑。因此,如果您在范围中包含复选框,那么您可以检测到用户点击它们。
推荐阅读
- javascript - 滚动上带有过渡图像的英雄图像
- microsoft-graph-api - 如何在 Microsoft Graph API 响应中获取 OneDrive 文件夹名称
- android - Android在一段时间后自动停止expo应用程序
- google-apps-script - 如何在 Google Analytics 上跟踪 Google 表格
- entity-framework-core - EntityEntry.OriginalValues.ToObject() 与 EntityEntry.Entity 相同
- php - 只有当它包含一个键时 PHP 集合才会展平对象
- selenium - 忽略大小写 Xpath @Name 属性 c# Selenium/Appium
- flutter - 参数类型“RemoteMessage”不能分配给参数类型“Map”
' - amazon-web-services - AWS Amplify、Next.js 和经过身份验证的 SSR 的问题
- sql - 甲骨文 SQL | 如果一列包含一个值,那么它将排除同一列中的不同值