Google工作表脚本 - 获取复制/粘贴的实际范围

问题描述 投票:0回答:1

我正在写一个小脚本来帮助我处理一些dataValidation,我遇到了一个问题:

给定10行和1列的范围,我选择这些行中的至少2行并复制然后将其粘贴到工作表中的其他位置,我通过Logger.log获得这样的反馈:

[18-08-31 14:15:32:677 PDT] coverage rows[1.0-3.0] cols[5.0-5.0]

印刷人:

curRange = e.range;
var minRow = curRange.getRow();
var maxRow = curRange.getLastRow();
var minCol = curRange.getColumn();
var maxCol = curRange.getLastColumn();
Logger.log("rows[%s-%s] cols[%s-%s]", minRow, maxRow, minCol, maxCol);

现在......奇怪的部分是:如果我在所述列上有一个过滤器,我选择只显示1个值,我最终会说4行(ID为2,5,6和8)。如果我执行这个较小范围(4行和1列)的副本,然后将其粘贴到工作表中的其他位置,我将得到以下反馈:

[18-08-31 14:15:32:677 PDT] coverage rows[2.0-2.0] cols[5.0-5.0]

有没有办法通过onEdit(e){e.range}找出我编辑过哪个ID?或者任何其他能给我带来价值2,5,6和8的解决方案?

google-apps-script google-sheets google-apps
1个回答
0
投票

我想在评论中使用它,但它在那里太乱了。所以我会写一个答案。

onEdit(e)仅在您编辑范围时触发,而e是编辑的范围。因此,如果您粘贴数据,您将触发onEdit(e)e是您的目的地,并且源范围被“遗忘”为好。使用onEdit(e),在触发它之前无法知道你做了什么。因此,在onEdit(e)触发之前,您无法在日志中写入任何内容。在这种情况下,您复制数据的范围。

这里有一个小技巧可以做你需要的东西:使用脚本复制和粘贴。用这样的东西写一个函数

for(i = r;i < r + numRow ;i++) {
    if (sheet.getRange("A" + i) matches filter) {// assume that you filter your data based on column A
    copy data to destination
    write source to log
    } 
 }

然后在工作表的某个位置分配该功能。

每次您需要完成工作时,您只需要运行您的功能。

虽然还有其他方法可以实现您想要的,即使用=ARRAYFORMULA(ROW(A1:A1000))写出一列中的行数,当您复制数据时,也复制该列,然后您可以处理这些值,就好像您是使用代码中的行号。嗯,这很草率,你可能不得不编辑公式,当你的表格扩展超过1000行..这就是为什么我不推荐它。但是,如果你可以预测有多少行对你的表有好处,我猜它没关系..

© www.soinside.com 2019 - 2024. All rights reserved.