类型错误:无法在Google Apps脚本中读取未定义的属性“长度”

时间:2015-01-05 16:55:27

标签: google-apps-script typeerror

我正在尝试使用@serge的script将电子邮件发送到电子表格中。

我收到类型错误:“无法从未定义的”读取属性“length”。

任何帮助解决问题的人都会非常感激。

function getMessagesWithLabel() {
    var destArray = new Array();
    var threads = GmailApp.getUserLabelByName('CDC Health Alerts').getThreads(1,30);

    for(var n in threads){
        var msg = threads[n].getMessages();
        var destArrayRow = new Array();
        destArrayRow.push('thread has '+threads[n].getMessageCount()+' messages');
        for(var m in msg){
            destArrayRow.push(msg[m].getSubject());
        }
        destArray.push(destArrayRow);
    }
    Logger.log(destArray);
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sh = ss.getActiveSheet();
    if(ss.getLastRow()==0){
        sh.getRange(1,1).setValue('getMessagesWithLabel() RESULTS')
    };
    sh.getRange(ss.getLastRow()+1,1,destArray.length,destArray[0].length).setValues(destArray)
}

1 个答案:

答案 0 :(得分:0)

使用length()属性的唯一行是最后一行。

sh.getRange(ss.getLastRow()+1,1,destArray.length,destArray[0].length).setValues(destArray)

因此,名为 destArray 的数组未获取任何数据。如果您检查destArray中包含的值,则会显示未定义的值。您需要从代码的顶部开始,并检查关键点以获取分配给变量的内容。例如:

var threads = GmailApp.getUserLabelByName('CDC Health Alerts').getThreads(1,30);
Logger.log('threads: ' + threads);

请注意上面代码中的Logger.log()语句。添加Logger.log('Some Text: ' + variableName);语句,然后查看LOGS,看看变量' threads`是否正在获得分配给它的内容。

继续这样做,直到找到问题为止。即使错误来自最后一行,代码中也会出现错误,因为变量destArray未获得指定的值。