调试应用程序脚本很困难

问题描述 投票:0回答:2

如何解决谷歌应用脚​​本错误:“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);
    }
}
arrays debugging google-apps-script google-sheets google-apps-script-editor
2个回答
1
投票

你设置了工作表变量吗?

var sheet = SpreadsheetApp.getActiveSheet();

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

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

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


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());
}
© www.soinside.com 2019 - 2024. All rights reserved.