Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 时间驱动触发Google脚本移动满足特定条件的电子表格行_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 时间驱动触发Google脚本移动满足特定条件的电子表格行

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();

我目前有这个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 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处。