繁体   English   中英

在非活动工作表上运行脚本

running script on an Inactive sheet

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我一直在使用以下脚本将“完成”列从一张纸移动到另一张纸:

function onEdit(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Sheet1" && r.getColumn() == 15  && r.getValue() == 
"Finished") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Finished");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}

我试图弄清楚即使未打开或编辑工作表也如何运行脚本。 我只是不确定如何将其更改为每分钟左右使用时间触发器。

1 个回复

从onEdit更改为定时触发器有两个方面。
第一个是对代码的修订,第二个是触发器的详细信息。


该代码无法重复使用,因为定时触发器未提供与OnEdit相同的事件详细信息。
另外,有可能在每个触发事件之间将几行标记为“完成”,并且代码需要对它们全部进行响应。 最后,每条“完成的”行都无法删除,因为这会影响该列中所有剩余行的行数。

以下代码可以完成这项工作:
发问者会很熟悉。 主要的例外是保留每个行号的记录,该记录已移至“完成”。 这是通过将行号压入数组来完成的。 然后,在检查并移动了所有数据之后,有一个小循环,该循环获取记录在阵列中的行号并删除相关行。 循环从最高的行号到最低的行号工作; 这样一来,删除一行不会影响要删除的任何剩余行的行号。


function so_53305432() {

    // set up the spreadsheet
    var ss = SpreadsheetApp.getActiveSpreadsheet();

    // identify source and target sheets
    var sourceSheet = ss.getSheetByName("Sheet1");
    var targetSheet = ss.getSheetByName("Finished");

    // get some variables to use as ranges
    var sourcelastRow = sourceSheet.getLastRow();
    var numColumns = sourceSheet.getLastColumn();
    var targetLastRow  = targetSheet.getLastRow();

    // get data from the Source sheet
    var sourceData = sourceSheet.getRange(1, 1, sourcelastRow, numColumns).getValues();

    // set up some variables
    var finishedRows = [];
    var i = 0;
    var x = 0;
    var temp = 0;


    // loop through column 15 (O) checking for value = "Finished"
    for (i = 0; i < sourcelastRow; i++) {

        // If value = Finished
        if (sourceData[i][14] == "Finished") {

            // define the target range and move the source row
            var targetLastRow  = targetSheet.getLastRow();
            var target = targetSheet.getRange(targetLastRow + 1, 1);
            sourceSheet.getRange(+i + 1, 1, 1, numColumns).moveTo(target);

            // keep track of the source row number.
            finishedRows.push(i);
        }
    }

    // set up variables for loop though the rows to be deleted
    var finishedLength = finishedRows.length;
    var startcount = finishedLength - 1

    // loop throught the array to delete rows; start with the highest row# first
    for (x = startcount; x > -1; x--) {
        // get the row number for the script
        temp = +finishedRows[x] + 1;
        // delete the row
        sourceSheet.deleteRow(temp);
    }

}

触发
触发条件需要修改。 去做这个:
1)打开脚本编辑器,选择“当前项目触发器”。 OnEdit应该显示为事件类型为OnEdit的现有触发器。
2)将“选择要运行的功能”更改为新功能,
3)将“选择事件源”从电子表格更改为“时间驱动”。
4)选择“基于时间的触发器类型” =“分钟计时器”。
5)选择“选择分钟间隔” =,然后选择一个时间段和间隔。
6)保存触发器,然后关闭“触发器”选项卡

如果发现“每分钟”太频繁,则发问者可以尝试“每5分钟”。


之前触发


之后触发


2 Chrome扩展程序-注入脚本并在“非活动”标签上运行

我有Chrome扩展程序,可以在加载页面时将脚本注入页面。 如果是某个页面,它将在该页面上的新选项卡中打开一组链接,并且在加载这些选项卡后,注入的脚本会在该选项卡上提交表单。 问题是,注入不是在不是当前的选项卡上进行的。 它仅在当前选项卡上起作用。 我的代码的简化版本: man ...

4 Google表格脚本无法可靠运行

我已经有了一个非常可靠的脚本: 1)从新数据选项卡中获取数据并将其发布到现有数据选项卡2)从新数据选项卡中清除数据3)从现有数据选项卡中删除重复项 当我最初放置此脚本时,它工作得很好。 但是运行几次后,它似乎停滞在脚本的重复数据删除部分。 因此,当我运行它时,前两个脚本会运行,但 ...

5 脚本在工作表中运行良好,而不是在另一个工作表中

我有两张工作表,都在一个共享驱动器中。 两者都有相同的脚本来发送基于 Google Doc(也位于共享驱动器中)的 html 电子邮件:首先我获取 html 代码,然后发送邮件。 在一张工作表中一切正常,但如果我在另一张工作表中运行它,我会得到 404。 我首先想到了一个权限问题,但我从两个不同 ...

6 在非活动工作表上重新加载

我正在使用谷歌脚本在谷歌表上制作会议室预订系统。 我编写了代码来每天重新加载活动表,以便更新日期。 但是,非活动工作表(有多个工作表,每个不同房间一个)不会重新加载,除非您在该工作表上打开,或者继续然后刷新。 我想对其进行编码,以便工作表即使不是活动工作表也会自动更新。 我该怎么做? 我会使用触发器 ...

8 在Google表格中运行脚本时出错

我创建了一个脚本来进行简单的复制和排序,并收到一条错误消息。 TypeError:无法调用null的方法“ getRange”。 以下是调试报告的jpg 我运行了调试并收到以下消息。 TypeError:无法调用null的方法“ getRange”。 (第5行 ...

10 在工作表更新之前运行脚本

我正在做一个数据库类型的事情,其中​​一个工作表可以编写并与另一个工作表进行比较。 写入是通过脚本完成的,但回调是通过QUERY在工作表上完成的。 作为脚本的一部分,我将根据这些返回值进行一些格式化。 我遇到的问题是,如果我先写数据库电子表格,然后在未及时执行工作表查询之后直接运行格式 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM