【问题标题】:Cannot call method "getRange" of null. (line 20, file "Code")无法调用 null 的方法“getRange”。 (第 20 行,文件“代码”)
【发布时间】:2019-02-11 15:47:15
【问题描述】:

TypeError:无法调用 null 的方法“getRange”。 (第 20 行,文件“代码”) 我的脚本正在按我的意愿运行,但我继续收到上述错误。该脚本有一个触发器在表单完成时运行,它运行移动数据,然后返回上述错误。 Here is the sheet

第 20 行是

    var data = sourceSpreadSheetSheetID.getRange(2, 1,sourceSpreadSheetSheetID.getLastRow()-1, sourceSpreadSheetSheetID.getLastColumn()).getValues();

我检查了工作表名称并进行了调整,但似乎遗漏了什么。

    function CopyDataToNewFile() {

// How Many Columns over to copy
var columsCopyCount = 4; // A=1 B=2 C=3 ....

// What Column to Monitor
var columnsToMonitor = 3; // A=1 B=2 C=3 ....MONITORS In or Out

//TARGET SPREAD SHEETS
var HallPass = "Hall_Pass"
var CheckOut = "Out";
var CheckIn = "In";

//SOURCE SPREAD SHEET
var ss = SpreadsheetApp.openById('1B93n7wQ8rosmcaqlpgD9FoL1KWfbXALrror7t6r5K2M'); //Need ID from Form response sheet
var sourceSpreadSheetSheetID = ss.getSheetByName(HallPass);
var sourceSpreadSheetSheetID1 = ss.getSheetByName(CheckOut);
var sourceSpreadSheetSheetID2 = ss.getSheetByName(CheckIn);

var data = sourceSpreadSheetSheetID.getRange(2, 1,sourceSpreadSheetSheetID.getLastRow()-1, sourceSpreadSheetSheetID.getLastColumn()).getValues();

var Out = [];
var In = [];


for (var i = 0; i < data.length; i++) {

    var rValue = data[i][2];

    if (rValue == CheckOut) {
        Out.push(data[i]);
    } else if (rValue == CheckIn) {
        In.push(data[i]);

    }
}

if(Out.length > 0){
  sourceSpreadSheetSheetID1.getRange(sourceSpreadSheetSheetID1.getLastRow() + 1, 1, Out.length, Out[0].length).setValues(Out);
  sourceSpreadSheetSheetID.deleteRows(2,sourceSpreadSheetSheetID.getLastRow() - 1);
}

if(In.length > 0){
   sourceSpreadSheetSheetID2.getRange(sourceSpreadSheetSheetID2.getLastRow() + 1, 1, In.length, In[0].length).setValues(In);
   sourceSpreadSheetSheetID.deleteRows(2,sourceSpreadSheetSheetID.getLastRow() -1);
}}

我希望这个脚本运行没有错误

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    所以代码看起来应该可以运行,因为你得到的错误是关于 sourceSpreadSheetSheetID 是一个 null 值,所以当我检查你发布的电子表格时,我注意到你引用的工作表因为“HallPass”实际上被称为“Hall_Pass”。在您的代码中,不是传入变量HallPass,而是给它一个字符串"HallPass"。这是导致问题的原因。

    var ss = SpreadsheetApp.openById('1B93n7wQ8rosmcaqlpgD9FoL1KWfbXALrror7t6r5K2M'); //Need ID from Form response sheet
    var sourceSpreadSheetSheetID = ss.getSheetByName(HallPass); //Sheet name was incorrect.
    // Did you mean to leave out the Quotations to refer to the variable above?
    var sourceSpreadSheetSheetID1 = ss.getSheetByName(CheckOut);
    var sourceSpreadSheetSheetID2 = ss.getSheetByName(CheckIn);
    

    【讨论】:

    • 我相信我正确地进行了建议的更改,但我仍然遇到同样的错误。我已对原始帖子进行了更改以反映更改。
    • @JeremyHunter 这很奇怪。你确定这是同一个错误而不是指不同的行吗?
    • 这是发送给我的错误。 2/11/19 10:00 AM CopyDataToNewFile 范围的坐标或尺寸无效。 (第 19 行,文件“代码”)formSubmit 2/11/19 10:00 AM
    • @JeremyHunter 这是关于同一行的不同错误。工作表设置是什么样的?错误在这里很明显。
    • 谢谢你没有注意看到同一行做出了假设。我没有用工作表更改任何内容,不确定是什么原因导致此错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    相关资源
    最近更新 更多