时间驱动的触发式Google脚本可移动符合特定条件的电子表格行

时间:2015-10-29 04:17:37

标签: 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();
   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知识几乎没有,所以如果这是一个愚蠢的问题,我会道歉。但我真的需要让我的谷歌电子表格工作,所以我非常感谢你的帮助。

如果您需要更多详细信息,请与我们联系。

非常感谢和问候,

1 个答案:

答案 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);
}