Google apps script 时间驱动触发Google脚本移动满足特定条件的电子表格行
我目前有这个Google脚本,希望它每12小时运行一次,但时间驱动触发器设置不起作用:Google apps script 时间驱动触发Google脚本移动满足特定条件的电子表格行,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我目前有这个Google脚本,希望它每12小时运行一次,但时间驱动触发器设置不起作用: function binIT() { var sheetOrg = "1stSheet"; var columnNum = 4; var value1 = "DONE"; var value2 = "Removed"; var sheetBin = "2ndSheet"; var ss = SpreadsheetApp.getActiveSpreadsheet();
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 testing最近未能完成
成功地
故障摘要如下所示。配置
此脚本的触发器,或更改接收的设置
以后的故障通知,请单击此处
脚本由
文档事件发现
总结:
错误消息计数
错误值(第6行,
文件“代码”)2
详情:
启动功能错误消息触发器结束
2015年10月28日下午5:22 BinIT错误值(第6行,文件
“代码”)基于时间的10/28/15下午5:22
2015年10月28日下午5:23 BinIT坏值
(第6行,文件“代码”)基于时间的10/28/15下午5:23
真诚地
谷歌
应用程序脚本需要帮助吗?访问谷歌应用程序脚本文档
请不要回复此邮件。(c) 2015年谷歌*
我注意到,在我的脚本中,它似乎将活动单元格作为范围,因此时间触发器无法工作。但我不知道如何浏览整个专栏并获得价值
我的java知识几乎没有,所以如果这是一个愚蠢的问题,我深表歉意。但我真的需要让这个工作为我的谷歌电子表格,所以我非常感谢你的帮助
如果你需要更多的细节,请告诉我
非常感谢和问候
Nam正如前面所建议的,您不能在时间驱动触发器上使用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);
}
它工作得很好。非常感谢@JPV。只是一个简单的问题,你在哪里定义这个列?这里是不是这部分的indexOf(values[i][3])?上面写着3,但实际上检查了D列JS中的数组是零索引的。因此,电子表格中的第一列将位于JS数组中的索引0处。