TypeError:无法调用null的方法“ getRange”。 (第20行,文件“代码”)

时间:2018-09-16 19:15:46

标签: google-apps-script google-sheets

当我尝试运行此脚本时,我不断收到此错误。用于将我的Google表格数据转换为JSON API。

TypeError:无法调用null的方法“ getRange”。 (第20行,文件“代码”)

function doGet(e) {

   var sheetName = "Sheet name";
   var sheetId   = "1234...";

   var book = SpreadsheetApp.openById(sheetId);
   var sheet = book.getSheetByName(sheetName);

   var json = convertSheet2JsonText(sheet);

   return ContentService
        .createTextOutput(JSON.stringify(json))
        .setMimeType(ContentService.MimeType.JSON);
}

function convertSheet2JsonText(sheet) {
  // first line(title)
   var colStartIndex = 1;
   var rowNum = 1;
   var firstRange = sheet.getRange(2, 2, 2, sheet.getLastColumn());
   var firstRowValues = firstRange.getValues();
   var titleColumns = firstRowValues[0];

  // after the second line(data)
   var lastRow = sheet.getLastRow();
   var rowValues = [];
   for(var rowIndex=2; rowIndex<=lastRow; rowIndex++) {
   var colStartIndex = 1;
   var rowNum = 1;
   var range = sheet.getRange(rowIndex, colStartIndex, rowNum, 
sheet.getLastColumn());
   var values = range.getValues();
   rowValues.push(values[0]);
}

// create json
   var jsonArray = [];
   for(var i=0; i<rowValues.length; i++) {
   var line = rowValues[i];
   var json = new Object();
   for(var j=0; j<titleColumns.length; j++) {
     json[titleColumns[j]] = line[j];
   }
  jsonArray.push(json);
 }
 return jsonArray;
}

您能看到导致此错误的任何信息吗?

1 个答案:

答案 0 :(得分:2)

您的工作表名称和/或您在代码中使用的工作表ID不正确。


错误消息=“ TypeError:无法调用null的方法” getRange“。(第20行,文件“ Code”)”

  

第20行:var firstRange = sheet.getRange(2,2,2,   sheet.getLastColumn());

getRange由“工作表”调用;这意味着“工作表”为空。

您需要使用脚本调试功能(运行>调试功能)来分析代码。在 doGet 上运行调试-调试将自动包含 convertSheet2JsonText ,由 doGet 调用。

我在一个名为“ s1x”的工作表中创建了一些虚拟数据,但是,我故意为它分配了'sheetName'=“ s1”。现在,当我运行Debug时,会收到相同的错误消息。

第20行是函数 convertSheet2JsonText 的一部分,但该函数中没有此缺陷。错误出现在 doGet 中。

下面是显示错误的调试屏幕。注意“ sheet”的值= null。 enter image description here


下面是调试屏幕,显示 doGet 的值。请注意,“工作表”的值已经为空。但还要注意sheetName =“ s1”的值。唯一的问题是工作表的实际值为“ s1x”。这就解释了为什么“工作表”为空。

当我更正sheetName的值时,该函数运行正常,没有错误。 enter image description here