【问题标题】:Move entire row to another sheet using time based action rather than onEdit使用基于时间的操作而不是 onEdit 将整行移动到另一个工作表
【发布时间】:2018-05-26 20:30:18
【问题描述】:

我正在使用以下代码将整行数据从一张纸移动到另一张纸,效果很好。

我正在使用 AppSheet 让用户访问和编辑阻止表格中的 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);
  }
}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

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

    步骤:

    1. 重命名onEdit()函数。也许您可以将其重命名为moveRow()
    2. 从顶部菜单栏中选择time based trigger
    3. 从下拉列表中选择合适的时间表和此功能。
    4. 保存更改。

    确保您已授予适当的权限。您可以通过尝试手动运行一次函数来检查这一点(通过从顶部选择函数下拉菜单中选择它并单击运行/执行图标)。

    【讨论】:

    • 嗨,Umair!感谢您的回复。我确实尝试过,但是,第 6 行和第 7 行返回一个错误,因为这是一个“事件源”。抱歉,如果这似乎是一个愚蠢的问题,因为我对此完全是新手,但是是否有替代获取来源的方法?我尝试删除源的事件部分,它也返回错误
    • 事件对象只有在它被某些编辑或更改触发时才会出现,在该对象内部有关于在何处、什么等类型的编辑或更改进行的数据。由于基于时间的触发器是基于时间的,而不是基于编辑或更改的,所以它不会发送任何事件对象。如果您能向我解释您想要实现的最终目标,也许我可以在删除事件对象方面为您提供更多帮助。
    猜你喜欢
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    相关资源
    最近更新 更多