【问题标题】:TypeError: Cannot call method "getRange" of null. (line 9, file "Code")TypeError:无法调用 null 的方法“getRange”。 (第 9 行,文件“代码”)
【发布时间】:2017-09-24 23:22:32
【问题描述】:

我正在使用下面的过滤器功能将数据从一张纸复制到另一张纸,过滤掉以便仅在列 AE = TRUE 时复制数据。 当我使用这个脚本时,它给了我错误: 'TypeError:无法调用 null 的方法“getRange”。 (第 9 行,文件“代码”)' 请问有人可以帮忙吗? 我是 Google Script 的新手,不确定 getRange 部分的含义。任何帮助将不胜感激!

function myFunction() {
var sss = 
SpreadsheetApp.openById('1V3Tl4h43AC92K4gQtvdZ07k01QJOnfwSD1BKKTziHJU'); 
var ss = sss.getSheetByName('<20 Filter'); 
var range = ss.getRange('A:AE'); 
var data = range.getValues();

var tss = 
SpreadsheetApp.openById('1AKL81cN5QWTWSsSfuMGcFRED5QpeAK022k8VwrPl7sA'); 
var ts = tss.getSheetByName('Zones >20 Riders'); 
ts.getRange(ts.getLastRow()+1, 1, data.length, 
data[0].length).setValues(data);

var range = ts.getRange(ts.getLastRow()+1, 1, data.length, 
data[0].length)
var rawData = range.getValues()     // get value from spreadsheet 2
var data = []                       // Filtered Data will be stored in this array
for (var i = 0; i< rawData.length ; i++){
if(rawData[i][30] == "TRUE")            
{
data.push(rawData[i])
}
}
}

或者我可以使用这个脚本吗?

function myFunction() {
var sss = SpreadsheetApp.openById('1V3Tl4h43AC92K4gQtvdZ07k01QJOnfwSD1BKKTziHJU'); //replace with source ID
var ss = sss.getSheetByName('<20 Filter'); //replace with source Sheet tab name
var range = ss.getRange('A:AE');      //assign the range you want to copy
var rawData = range.getValues()     // get value from spreadsheet 1
var data = []                       // Filtered Data will be stored in this array
for (var i = 0; i< rawData.length ; i++){
if(rawData[i][30] == "TRUE")           
{
data.push(rawData[i])
}
}
var tss = SpreadsheetApp.openById('1AKL81cN5QWTWSsSfuMGcFRED5QpeAK022k8VwrPl7sA'); //replace with destination ID
var ts = tss.getSheetByName('Zones <20 Riders'); //replace with destination Sheet tab name
ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length).setValues(data);

}

但它给了我错误:TypeError:无法从未定义中读取属性“长度”。 (第 15 行,文件“代码”)

【问题讨论】:

    标签: javascript google-apps-script google-sheets


    【解决方案1】:

    这意味着tss.getSheetByName('Zones &gt;20 Riders'); 没有返回任何东西。在尝试访问之前,您需要检查是否确实找到了工作表。

    这是Google Docs提供的示例:

    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Expenses");
    
    if (sheet != null) {
        // Do your thing
    }
    

    如果您不确定某个方法的作用,请务必查看文档。例如,getRange 返回工作表中指定的Range 单元格。

    【讨论】:

    • 它只是复制而不是过滤...所以它只是复制所有内容。
    【解决方案2】:

    尝试如下更改

    var sss = 
    SpreadsheetApp.openById('1V3Tl4h43AC92K4gQtvdZ07k01QJOnfwSD1BKKTziHJU'); 
    var ss = sss.getSheetByName('<20 Filter'); 
    var sheet = ss.getSheets()[0];
    var range = sheet.getRange('A:AE'); 
    var data = range.getValues();
    

    注意:getSheets 返回此范围所属的工作表。 如果这对您有用,请勾选回答。

    【讨论】:

    • 感谢您的帮助!不幸的是,这并没有奏效。我可以试试这个脚本吗?
    • TypeError:在对象表中找不到函数 getSheets。 (第 5 行,文件“代码”)
    • 你能在 var ss = sss.getSheetByName('
    • 如果我把 var ss = sss.getSheetByName('
    • 不,不可能。因为您甚至在调用 getSheets 之前就尝试控制台日志“var ss = sss.getSheetByName('
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多