调试应用程序脚本很困难

时间:2016-05-08 06:36:54

标签: arrays debugging google-apps-script google-sheets google-apps-script-editor

如何解决谷歌应用脚​​本错误:" TypeError:无法调用方法" getRange"为null。 (第16行,文件"代码")"调试以下脚本时:

function getEmails_(q) {
    var emails = [];
    var threads = GmailApp.search(q);
    for (var i in threads) {
        var msgs = threads[i].getMessages();
        for (var j in msgs) {
            emails.push([msgs[j].getBody().replace(/<.*?>/g, '\n')
                .replace(/^\s*\n/gm, '').replace(/^\s*/gm, '').replace(/\s*\n/gm, '\n')
            ]);
        }
    }
    return emails;
}

function appendData_(sheet, array2d) {
    sheet.getRange(sheet.getLastRow() + 1, 1, array2d.length, array2d[0].length).setValues(array2d);
}

function saveEmails() {
    var array2d = getEmails_("Still looking for Python Programming help");
    if (array2d) {
        appendData_(SpreadsheetApp.getActiveSheet(), array2d);
    }
}

2 个答案:

答案 0 :(得分:1)

您是否设置了工作表变量?

var sheet = SpreadsheetApp.getActiveSheet();

执行Logger.log(array2d);检查数组中是否正在设置数据。

这是因为它无法找到这张纸。

我有时会遇到此错误,并且必须重命名工作表才有效。这很奇怪。

答案 1 :(得分:0)

您正试图访问getRange()上的null sheet,因为在您的上下文中SpreadsheetApp.getActiveSheet()返回null(即没有有效的电子表格)

更多上下文可以帮助您找到为您的函数提供有效电子表格的方法。

您可以通过实例打开电子表格:

  • SpreadsheetApp.open(file)
  • SpreadsheetApp.openById(id)
  • SpreadsheetApp.openByUrl(url)

然后将其设为有效SpreadsheetApp.setActiveSpreadsheet(newActiveSpreadsheet) https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app

还有其他方法可以激活电子表格,例如触发触发器时(例如notifyOnFormSubmit)。

为确保您拥有有效的电子表格,您可以在使用前测试SpreadsheetApp.getActiveSheet()

var spreadsheet = SpreadsheetApp.getActiveSheet();
if (spreadsheet) {
  Logger.log('spreadsheet url:' + spreadsheet.getUrl());
}