如何使用Apps脚本根据时间自动将大量数据行同时移动到不同的电子表格

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

我想将数据移动到另一个有时间限制的电子表格,例如在中午 12 点,数据将自动移动,然后源中的数据将被删除(我认为通过使用触发器,但我不知道是否属实或不)。供您参考,以前我使用了复选框,但它对我来说效率较低(脚本如下),因为我有很多数据需要同时移动。谁能帮我制作剧本吗?谢谢

function onMyEdit(e) {
  //e.source.toast('Entry');
  var sh=e.range.getSheet();
  //Logger.log(JSON.stringify(e));
  if(sh.getName()=='DatabaseTemp' && e.range.columnStart==13 && e.value=="TRUE") {
    //e.source.toast('Access');
    e.range.setValue('FALSE');
    var tss=SpreadsheetApp.openById('1qx-I_mv8Zxxxxxxxxxxxxxxxxxxxxxx');
    var tsh=tss.getSheetByName('Database');
    var v=sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()-3).getValues();
    Logger.log(v);
    tsh.getRange(tsh.getLastRow()+1,1,v.length,v[0].length).setValues(v);
    sh.deleteRow(e.range.rowStart);
  }
}

在此输入图片描述

工作表名称的示例为 “数据源”,工作表名称为 “数据库”

的目标或目标电子表格“1OWqOlqy_pfZXXXXXXxxxxxxx”
google-sheets google-apps-script
1个回答
0
投票

使用 Apps 脚本在电子表格之间自动移动数据并设置时间驱动触发器

您可以尝试以下代码:

function moveDataAutomatically() {
  var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var targetSpreadsheet = SpreadsheetApp.openById('1wWN8iocE0ZxII50P7p-vs8eReum3OAku6hdH3zmtW1I');
  var targetSheet = targetSpreadsheet.getSheetByName('Sheet2');
  var data = sourceSheet.getRange(2, 1, sourceSheet.getLastRow()-1, sourceSheet.getLastColumn()).getValues();

  if (data.length > 0) {
    targetSheet.getRange(targetSheet.getLastRow()+1, 1, data.length, data[0].length).setValues(data);
    for (var i = sourceSheet.getLastRow(); i > 1; i--) {
      sourceSheet.deleteRow(i);
    }
  }
}

以下是设置触发器的步骤:

要运行此脚本

every day at 12 PM
,您需要在Google表格中设置触发器:

1.) 在 Apps 脚本编辑器中,单击左侧工具栏上的时钟图标以打开触发器页面。

2.) 单击右下角的 + 添加触发器。

3.) 将函数设置为`moveDataAutomatically。

4.) 将部署设置为 Head。

5.) 选择“时间驱动”作为事件源。

6.) 选择“日定时器”作为基于时间的触发器类型。

7.) 选择触发器运行所需的日期和时间。

8.) 保存触发器,您的脚本现在将每天自动运行一次。

用于可视化时间驱动触发器设置的附加图像:

示例输出:

数据来源

Data Source

数据库

Database

参考:

时间驱动的触发器

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