首页 > 解决方案 > 将数据从一张表传输到另一张表并删除谷歌表中的旧数据

问题描述

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

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

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

但我面临一些问题。

  1. Google 脚本错误:异常:此操作会将工作簿中的单元格数量增加到超过 5000000 个单元格的限制。删除完成@ 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");
       }
     }

标签: javascriptgoogle-apps-script

解决方案


错误原因:

这些行:

  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(Not a number) 结束,这些表似乎被解释为无穷大。这就是您收到错误的原因:

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

参考


推荐阅读