javascript - 将数据从一张表传输到另一张表并删除谷歌表中的旧数据
问题描述
审核:通过谷歌表格填写,将是主表进行中:仅输入维修车并可以访问。已完成:所有已完成的维修汽车。
如果汽车已经修好,进行中的工作表会显示“已完成”。然后应该从 In Progress 中删除这辆车并将其移至 Completed。我目前添加了一个帮助表,用于标识“已完成值”的单元格,在审核表单中对其进行编辑并相应地过滤该值。
但我面临一些问题。
Google 脚本错误:异常:此操作会将工作簿中的单元格数量增加到超过 5000000 个单元格的限制。删除完成@ Code.gs:35
每次更改工作表“进行中”中的 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");
}
}
解决方案
错误原因:
这些行:
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 触发器,这里有更多信息:
参考
推荐阅读
- ruby-on-rails - 如何禁用将sql记录到rails中的特定查询
- javascript - 如何向对象数组添加新元素?
- python-3.x - 如何在不返回仓库的情况下定义 TSP?
- c# - 根据视图上的输入更新集合
- oracle - 我可以以 sysdba 身份登录 sysadm 但不能没有 sysdba 参数
- javascript - d3 图表覆盖新数据,不删除旧数据
- r - 在文档生成中使用 R/knitr 进行控制流
- java - 带有 CSV 的 JavaFX TableView 将数据添加到 CSV
- svg - svg 转换文本在 chrome 中的别名,我该如何解决?
- python - python过滤器:从具有目标字符串的字符串列表中返回元组