excel - Excel 中是否有类似 Application.Intersect(Target, Range) 的谷歌脚本方法?
问题描述
现在我明白这个问题更深了,并且与事件的跟踪有关。
在 Excel 中,我使用以下代码:
If Not Intersect(Target, Sh.Range("$A$1:$A$300")) Is Nothing sub_do_something()
这里,Target - 选中单元格的地址,Intersect判断单元格是否属于指定范围。
我在系统中使用它来填写和计算项目的成本。
用户单击计算模板的特定部分中的一行。该脚本确定所选单元格的地址并将用户切换到目录的特定工作表。接下来,用户单击所需的目录行,脚本复制该行中一定范围的单元格并将用户返回到计算中。发生这种情况时,复制的数据会插入到一系列单元格中,从选定的单元格开始。
因此,创建一个可以有超过 100 个位置的计算被大大简化了。
在 Excel 中,一切正常,但很快我计划将此项目转移到基于云的服务,而 Google 表格是最佳选择。
唉,在 GAS 中只能跟踪某些事件,例如,使用 onOpen 或 onEdit 触发器。Excel 有更多的跟踪事件。
在 StackOverflow 上搜索后,我发现了几个与跟踪事件相关的类似问题,例如,如何在 Document-bound script 中找到用户光标的位置,我们能否实现一些在谷歌文档中选择某些内容时触发的代码?,谷歌应用脚本监控电子表格选定范围。
从这些问题的答案可以看出,在 GAS 中并没有 Excel 中的 Intersect(Target, Range) 这样简单的解决方案。最后一个示例使用侧面菜单,从中运行脚本,每秒查询工作表 5 次,并在“数据”字段中显示活动单元格的地址。
不幸的是,这段代码对我不起作用。在调试器中,getActiveRange() 函数工作正常,但这段代码不起作用:
$(document).ready(() => {
setInterval(()=>{
google.script.run.withSuccessHandler(log).getActiveRange();
},200)
})
log(e) => {
$('#data').val(e)
}
问题。
如果有人做过类似的事情,请分享您的经验。或者告诉我为什么这个例子不起作用。如果他能复活,我会让他适应我的任务。
解决方案
我从事过一个类似的项目,这是解决方案:
function onSelectionChange(e)
{
var ss = e.source;
var Sh = ss.getActiveSheet();
var range = Sh.getRange("A1:A300");
var target = e.source.getActiveRange();
//check for intersection
if(RangeIntersects(target, range))
{
Logger.log("Changed Row: " + target.getRow() + "\nValue: " + target.getValue());
}
}
//returns true if target intersects with the predefined range
function RangeIntersects(target, range)
{
return (target.getLastRow() >= range.getRow()) && (range.getLastRow() >= target.getRow()) && (target.getLastColumn() >= range.getColumn()) && (range.getLastColumn() >= target.getColumn());
}
推荐阅读
- android - 不幸的是,flutter_app 已经停止
- reactjs - Material-UI 卡片 Background-image 无法识别道具
- sql - 无法使用节点服务器连接到 SQL Server
- git - 在私有仓库中存储部署(只读)github密钥是否安全
- python - 用户更改墙纸时恢复墙纸的Python后台进程
- python - 如何使用 PyFPDF 制作内嵌粗体文本?
- mysql - mysql根据日期选择最新数据
- jquery - 如何为每个输入输出不同的值
- javascript - SyntaxError 如果在函数中,则为意外标记
- python-3.x - How to connect pydrive with an Service Account