1

我希望你能帮我解决一个问题。

我有一个代码,它根据第 10 列中的时间将行从一个选项卡复制到另一个选项卡。我从这里获得了代码,并根据我的需要对其进行了修改。作为此代码的一部分,我有第二个选项卡,其中包含类似的信息,它只需要从中删除相同的行。但是,当它从第二个选项卡开始并指出“无法在对象中找到函数 getTime ...”时,我收到一条错误消息。我猜这是由于我的标题栏在第 10 列中没有时间。有没有办法从 filterarray 中排除行?

function moveRows() {

    var ss = SpreadsheetApp.getActive();
    var s = ss.getSheetByName("Today");
    var sr = ss.getSheetByName("Request History");
    var target = ss.getSheetByName("Archive");
    var today = new Date().getTime()
    var val = filterArray(s.getDataRange()
        .getValues());
    for (var len = val.length - 1, i = len; i >= 3; i--) {
        if (val[i][10].getTime() < today) {
            target.appendRow(val[i])
            s.deleteRow(i + 1)
        }
    }
    var val = filterArray(sr.getDataRange()
        .getValues());
    for (var len = val.length - 1, i = len; i >= 0; i--) {
        if (val[i][10].getTime() < today) {
            sr.deleteRow(i + 1)
      }
    }
}

function filterArray(array) {
    var filteredArray = [];
    array.forEach(function (r) {
        if (r[10] !== '') {
            filteredArray.push(r);
        }
    });
    return filteredArray;

    var cell = s.getRange("A2:A2");
    cell.setFormula("=query('Request History'!A:F)");
}

任何帮助将不胜感激。我不是编码员,但在使用它时通常会设法更改代码以满足我的需要。

谢谢, Sjoerd

4

1 回答 1

1

如果您的目标是在不存在日期/时间值时简单地不让脚本崩溃或删除该行,您可以“捕获”您收到的异常(错误),在这种情况下,脚本将简单地移动到收到此错误后的下一行。

这比更改“filterArray”以跳过一个选项卡而不是另一个选项卡的标题行更简单。

for (var len = val.length - 1, i = len; i >= 0; i--) {
    try{
       if (val[i][10].getTime() < today) {
          sr.deleteRow(i + 1)
       }
     }catch(error){
        Logger.log('Caught an error processing item '+i+': '+error);
     }
}

在此处查看 try/catch 文档: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch

于 2017-08-03T15:32:14.567 回答