我目前有这个Google脚本,并希望每12小时运行一次,但时间驱动的触发设置无效:
function binIT() {
var sheetOrg = "1stSheet";
var columnNum = 4;
var value1 = "DONE";
var value2 = "Removed";
var sheetBin = "2ndSheet";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();
if (sheet.getName() == sheetOrg && range.getColumn() == columnNum && range.getValue() == value1) {
var targetSheet = ss.getSheetByName(sheetBin);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(range.getRow());
}
if (sheet.getName() == sheetOrg && range.getColumn() == columnNum && range.getValue() == value2) {
var targetSheet = ss.getSheetByName(sheetBin);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(range.getRow());
}
}
这是我一段时间后收到的电子邮件:
*您的脚本,Makro测试,最近未能完成 成功。 故障摘要如下所示。配置 此脚本的触发器,或更改您的接收设置 未来的失败通知,请点击这里。
该脚本由。使用 记录事件发现。
摘要:
错误消息计数
不好的价值(第6行, 文件"代码")2
详细信息:
启动功能错误消息触发结束
10/28/15 5:22 PM BinIT错误值(第6行,文件 " Code")基于时间的10/28/15 5:22 PM
10/28/15 5:23 PM BinIT价值不佳 (第6行,文件"代码")基于时间的10/28/15 5:23 PM
此致,
谷歌
Apps脚本需要帮助?访问Google Apps脚本文档。
请不要回复此邮件。 (c)2015年Google *
我注意到在我的脚本中,它似乎将活动单元格作为范围,因此时间触发器不起作用。但我不知道如何扫描整个列并获得价值
我的java知识几乎没有,所以如果这是一个愚蠢的问题,我会道歉。但我真的需要让我的谷歌电子表格工作,所以我非常感谢你的帮助。
如果您需要更多详细信息,请与我们联系。
非常感谢和问候,
南
答案 0 :(得分:0)
如前所述,您无法在timedriven触发器上使用getActiveRange()和getActiveSheet()。而是尝试这样的事情(在数据的副本上,因为它还没有经过测试)。别忘了在var ss中填写你的电子表格ID
function binIT() {
var ss = SpreadsheetApp.openById('YOUR_SPREADSHEETID_HERE'),
sheetOrg = ss.getSheetByName("1stSheet"),
sheetBin = ss.getSheetByName("2ndSheet"),
valuesToCheck = ["DONE", "Removed"],
arr = [],
values = sheetOrg.getDataRange().getValues(),
i = values.length;
while (--i) {
if (valuesToCheck.indexOf(values[i][3]) > -1) {
arr.unshift(values[i])
sheetOrg.deleteRow(i + 1)
}
}
sheetBin.getRange(sheetBin.getLastRow()+1, 1, arr.length, arr[0].length).setValues(arr);
}