0

如何解决谷歌应用程序脚本错误:“TypeError:无法调用 null 的方法“getRange”。(第 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);
    }
}
4

2 回答 2

1

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

var sheet = SpreadsheetApp.getActiveSheet();

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

那是因为它找不到工作表。

我有时会遇到这个错误,不得不重命名工作表并且它起作用了。真奇怪。

于 2017-09-12T12:01:38.447 回答
0

您正在尝试访问getRange()anull 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());
}
于 2016-05-17T17:50:55.113 回答