Google Script通过电子邮件发送表单值,错误:无法读取属性"时间戳"来自undefined /无法读取属性" 0"来自undefined

时间:2017-12-13 12:23:19

标签: javascript

Google Script通过电子邮件发送表单值,错误:无法读取属性"时间戳"来自undefined /无法读取属性" 0"来自undefined。 我添加了两个带有两个错误的选项,脚本从exel文件接收信息。 代码如下:

    function sendFormByEmail(e) {
    var Subject = "Subject";
    var Email = "email";
    var Key = "keynumber";
    var Editors = 0;
    var extraColumns = 8;

    if (useEditors) {
        var editors = DocsList.getFileById(Key).getEditors();
        if (editors) {
            var notify = editors.join(',');
        } else var notify = Email;
    } else {
        var notify = Email;
    }

    var s = SpreadsheetApp.getActive().getSheetByName("Form Responses 1");
    if (extraColumns) {
        var headers = s.getRange(1, 1, 1, extraColumns).getValues()[0];
    } else var headers = s.getRange(1, 1, 1, s.getLastColumn()).getValues()[0];

    var message = "";
    for (var i in headers) {
        //First case:
        // message += headers[i] + ' = '+ s.namedValues[headers[i]].toString() + "\n\n";   
        //var i is "Timestamp"  
        //TypeError: Cannot read property "Timestamp" from undefined.
        //Second case:
        message += headers[i] + ' = ' + s.values[i].toString() + '\n\n'; 
        //TypeError: Cannot read property "0" from undefined.

    }
    MailApp.sendEmail(notify, Subject, message);
}

我在第一种和第二种类型中有以下两个错误: 1)TypeError:无法读取属性"时间戳"来自undefined 2)TypeError:无法读取属性" 0"来自undefined。 我的错误是什么?

1 个答案:

答案 0 :(得分:0)

这是因为您尝试访问不存在的属性,而Sheet对象似乎不包含namedValuesvalues属性,如果您想要将所有单元格添加到消息变量中,请尝试以下操作:

var s = SpreadsheetApp.getActive().getSheetByName("Form Responses 1");

if (extraColumns) {
    var values = s.getRange(1, 1, s.getLastRow(), extraColumns).getValues();
} else {
    var values = s.getRange(1, 1, s.getLastRow(), s.getLastColumn()).getValues();
}

var message = "";
for (var i=1; i < values.length; i++) { 

    for (var j=0; j < values[i].length; j++) {
        message += values[0][j] + ' = ' + values[i][j] + '\n\n'; 
    }

}

修改仅将最后一行添加到消息变量中:

var s = SpreadsheetApp.getActive().getSheetByName("Form Responses 1");

if (extraColumns) {
    var values = s.getRange(1, 1, s.getLastRow(), extraColumns).getValues();
} else {
    var values = s.getRange(1, 1, s.getLastRow(), s.getLastColumn()).getValues();
}

var message = "";
var lastRow = values.length-1;

for (var j=0; j < values[lastRow].length; j++) {
    message += values[0][j] + ' = ' + values[lastRow][j] + '\n\n'; 
}

希望这有帮助