使用基于时间的操作而不是onEdit

时间:2017-12-13 02:44:55

标签: google-apps-script google-sheets

我正在使用以下代码将整行数据从一张表格移动到另一张表格,这非常有效。

我正在使用AppSheet让用户访问和编辑阻止Sheets中onEdit功能的数据。 AppSheet建议我将此脚本更改为“基于时间的触发器”,以便应用程序中的编辑与直接在“表格”中编辑列的操作相同

有没有办法轻松做到这一点?

先谢谢你了!

    function onEdit(event) {
  // assumes source data in sheet named Needed
  // target sheet of move to named Acquired
  // test column with yes/no is col 4 or D
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

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

1 个答案:

答案 0 :(得分:1)

正如您所看到的,函数名称为onEdit(),这意味着它是基于编辑触发器的函数。换句话说,它应该在每次编辑中被触发并执行。 但现在你希望它基于时间而不是编辑。因此,您可以重命名该功能,并从此顶部菜单中为此功能创建基于时间的触发器。

步骤:

  1. 重命名onEdit()功能。也许您可以将其重命名为moveRow()
  2. 从顶部菜单栏中选择time based trigger
  3. 从下拉列表中选择合适的时间表和此功能。
  4. 保存更改。
  5. 确保您已授予适当的权限。您可以通过尝试手动运行该功能来检查这一点(通过从顶部选择功能下拉菜单并单击运行/执行图标)。