将数据从一张工作表传输到另一张工作表并删除谷歌工作表中的旧数据

时间:2021-06-04 06:36:24

标签: javascript google-apps-script

我有 3 张纸。 https://docs.google.com/spreadsheets/d/1jObb1jHIOV6LDXMrCHriSP2ywlOi9rDhwwNw5QYPcDk/edit#gid=2082210284

审核:通过谷歌表单填写,将成为主表 进行中:仅输入维修汽车并可以访问。 已完成:已完成的所有维修车。

如果汽车已经修好,进行中的表会显示“已完成”。然后应该从正在进行中移除这辆车并将其移动到已完成。我目前添加了一个帮助表,用于标识“已完成值”的单元格,在审核表单中对其进行编辑并相应地过滤该值。

但我遇到了一些问题。

  1. Google 脚本错误:异常:此操作会将工作簿中的单元格数量增加到超过 5000000 个单元格的限制。 removecompleted @ Code.gs:35

  2. 每次更改工作表“进行中”中的 D 列时自动运行 google 脚本。

    function removecompleted() {
      var SHEET_NAME = "Audit";
      var SHEET_NAME_2 = "In Progress";
      var row_delete = SpreadsheetApp.getActiveSheet().getRange(5, 2).getValue();
      var row_update = SpreadsheetApp.getActiveSheet().getRange(6, 2).getValue();
      var col_delete = SpreadsheetApp.getActiveSheet().getRange(5, 3).getValue();
      var col_update = SpreadsheetApp.getActiveSheet().getRange(6, 3).getValue();
      if (row_delete !== 0) {
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME_2).getRange(row_delete, col_delete).clear();
        SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME).getRange(row_update, col_update).setValue("Completed");
       }
     }

1 个答案:

答案 0 :(得分:0)

错误原因:

这些行:

  var row_delete = SpreadsheetApp.getActiveSheet().getRange(5, 2).getValue();
  var row_update = SpreadsheetApp.getActiveSheet().getRange(6, 2).getValue();
  var col_delete = SpreadsheetApp.getActiveSheet().getRange(5, 3).getValue();
  var col_update = SpreadsheetApp.getActiveSheet().getRange(6, 3).getValue();

最终得到这些值:

row_delete = Wed Jun 02 2021 00:00:00 GMT+0530 (India Standard Time)
row_update = Fri Jan 01 2021 00:00:00 GMT+0530 (India Standard Time)
col_delete = 1452
col_update = 1531

前两个是 Date 对象。

如果您不知道,getRange(),如果您将它与两个参数一起使用,则取行然后取列。所以你得到:

  • B5
  • B6
  • C5
  • C6

所以当你再次使用这些值来getRange()。你会得到一个错误。

SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME_2).getRange(row_delete,col_delete).clear();
SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME).getRange(row_update,col_update).setValue("Completed");

特别是,由于您试图给 getRange 一个 Date 对象,我相信它正在被转换为一个数字,最终会以 NaN (不是数字),这似乎解释了作为无穷大。这就是您收到错误的原因:

This action would increase the number of cells in the workbook above the limit of 5000000 cells

我建议使用 Logger.log()console.log() 来调试您的脚本,以找出变量包含您认为它们包含的值。

var row_delete = SpreadsheetApp.getActiveSheet().getRange(5, 2).getValue();
var row_update = SpreadsheetApp.getActiveSheet().getRange(6, 2).getValue();
var col_delete = SpreadsheetApp.getActiveSheet().getRange(5, 3).getValue();
var col_update = SpreadsheetApp.getActiveSheet().getRange(6, 3).getValue();
console.log(row_delete, row_update, col_delete, col_update)

如何在进行编辑时运行您的脚本

您可以使用 onEdit 触发器,更多信息请点击此处:

<块引用>

https://developers.google.com/apps-script/guides/triggers

参考