Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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工作表从filterArray中排除行_Google Apps Script_Google Sheets Query - Fatal编程技术网

Google apps script Google工作表从filterArray中排除行

Google apps script Google工作表从filterArray中排除行,google-apps-script,google-sheets-query,Google Apps Script,Google Sheets Query,我希望你能帮我解决一个问题 我有一个代码,它根据第10列中的时间将行从一个选项卡复制到另一个选项卡。我从这里得到了代码,并根据我的需要进行了修改。作为这段代码的一部分,我有第二个选项卡,其中包含类似的信息,它只需要从中删除相同的行。但是,当它从第二个选项卡开始并状态为“在对象中找不到函数getTime…”时,我收到一条错误消息。我猜这是因为我的标题栏在第10列中没有时间。有没有办法从filterarray中排除行 function moveRows() { var ss = Sprea

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

我有一个代码,它根据第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)");
}
函数moveRows(){
var ss=SpreadsheetApp.getActive();
var s=ss.getSheetByName(“今天”);
var sr=ss.getSheetByName(“请求历史”);
var target=ss.getSheetByName(“存档”);
var today=new Date().getTime()
var val=filterArray(s.getDataRange()
.getValues());
对于(var len=val.length-1,i=len;i>=3;i--){
if(val[i][10].getTime()<今天){
target.appendRow(val[i])
s、 删除行(i+1)
}
}
var val=filterArray(sr.getDataRange()
.getValues());
对于(var len=val.length-1,i=len;i>=0;i--){
if(val[i][10].getTime()<今天){
高级删除行(i+1)
}
}
}
函数过滤器阵列(阵列){
var filteredArray=[];
array.forEach(函数(r){
如果(r[10]!=''){
过滤光线。推(r);
}
});
返回过滤器阵列;
var单元格=s.getRange(“A2:A2”);
cell.setFormula(“=query('Request History'!A:F)”);
}
如蒙协助,将不胜感激。我不是一个程序员,但通常会设法改变代码,以适应我的需要时,玩它

谢谢,
Sjoerd

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

这比更改“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);
     }
}
for(var len=val.length-1,i=len;i>=0;i--){
试一试{
if(val[i][10].getTime()<今天){
高级删除行(i+1)
}
}捕获(错误){
Logger.log('捕获到处理项'+i+'时出错:'+error);
}
}
请参见此处的try/catch文档:

不客气,很乐意帮忙!请“接受”我的回答,这样问题就解决了