【问题标题】:TypeError: Cannot call method "getRange" of nullTypeError:无法调用 null 的方法“getRange”
【发布时间】:2017-05-04 01:18:01
【问题描述】:

在查看错误日志时,好像一行被调用了两次,我很困惑:

// set globals
var ss = SpreadsheetApp.getActiveSpreadsheet();

flushSheet("Daily Overall Summary", "A1");

function flushSheet(sheetname, range) {
  var sheet = ss.getSheetByName(sheetname); Logger.log("sheet is " + sheet);
  var the_cell = sheet.getRange(range);
  var cell_content = the_cell.getValues()[0][0];
  the_cell.clearContent();
  the_cell.setValue(cell_content);

  SpreadsheetApp.flush();
}

当我运行它时,我得到:

TypeError:无法调用 null 的方法“getRange”。 (第 8 行,文件 "forceFlush")解雇

以下是生成的日志:

[17-05-04 09:12:31:301 HKT] sheet is Sheet
[17-05-04 09:12:31:706 HKT] sheet is null

我不确定为什么 Logger.log() 会被调用两次,但我认为这暗示了我的问题。

GAS 告诉我变量 sheet 为 null,但它第一次在 sheet 上调用 getRange() 时它不为 null,正如您在第一个日志条目中看到的那样。

为什么 var sheet 等于 null 而不是 Sheet,为什么看起来事情被调用了两次?我应该怎么办?我想获取并设置 A1 的值与最初在 A1 中的值相同,因为我想做this

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    在这种情况下,当flushSheet() 在脚本编辑器上运行时,首先运行flushSheet("Daily Overall Summary", "A1");。接下来,运行flushSheet(sheetname, range)。因为对于下一个,sheetnamerange 没有值,它变成了sheet is null。并发生错误。

    作为测试,下面的示例怎么样?请运行main()

    示例脚本:

    // set globals
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    
    // Run main() using Script Editor
    function main(){
      flushSheet("Daily Overall Summary", "A1");
    }
    
    function flushSheet(sheetname, range) {
      var sheet = ss.getSheetByName(sheetname); Logger.log("sheet is " + sheet);
      var the_cell = sheet.getRange(range);
      var cell_content = the_cell.getValues()[0][0];
      the_cell.clearContent();
      the_cell.setValue(cell_content);
    
      SpreadsheetApp.flush();
    }
    

    如果我误解了你的问题,我很抱歉。

    【讨论】:

    • 谢谢你这现在有效。我是否有一种“更好”的方式来创建和调用我的函数,而不是嵌套在另一个名称的函数中?定义函数然后调用它的“常规”方式是什么?
    • 在谷歌的情况下,当functionName()被调用时,function functionName(){}被运行。只有functionName()functionName = function(){} 不能被脚本编辑器直接运行。但是当同时存在functionName()function functionName(){} 时,首先调用functionName() 并运行function functionName(){}。此外,function functionName(){} 正在运行。这可能与为电子表格创建自定义函数有关。我不知道这件事。所以一般来说,用户创建function functionName(){}并运行functionName()
    • 谢谢你的评论,但我不明白
    • 我很抱歉我的英语水平不好。我认为对于调用函数,更好的方法是在 Google Apps Script 中使用 function functionName(){} 样式的函数。因为将functionName() 和 `function functionName(){}`` 混合到脚本中会导致错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2019-11-03
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多