使用myImportRange自定义电子表格函数 - TypeError:无法调用undefined的方法“split”

时间:2012-10-25 11:42:33

标签: google-apps-script google-sheets

我正在尝试使用ahab的自定义Google Apps脚本myImportRange。我不熟悉编写自定义脚本,但我按照现有帖子中的说明,将以下内容复制并粘贴到脚本编辑器中:

// to be used in the spreadsheet like ImportRange, 
// i.e. like this: =myImportRange( "key" ; "sheet!range" ; GoogleClock() )
// the third parameter - GoogleClock() - triggers an automatic update every minute.
// updated 2011-07-17 (ahab): better regex to strip sheetname of *outer* single quotes
function myImportRange(key ,sheetrange) { 
    var shra = sheetrange.split("!") ;
    if (shra.length==1) shra[1]=shra[0], shra[0]="";  

    var sheetstring = shra[0].replace( /^'(.*)'$/g , "$1") // was: replace( /'/g , "") ; updated 2011-07-17 (ahab)

    var rangestring = shra[1] 

    var source = SpreadsheetApp.openById( key )    

    if ( sheetstring.length==0 ) sheet = source.getSheets()[0] ;
    else sheet = source.getSheetByName( sheetstring ) ;

    return  sheet.getRange( rangestring ).getValues(); 
} 

我现在收到以下错误:

  

TypeError:无法调用undefined的方法“split”。 (第6行)

我很抱歉,如果这是一个重复的问题,我发现很多与这个主题相关的主题,不幸的是我知道如果这种事情是如此基本,我无法弄清楚其他答案如何与我的脚本相关。

我非常感谢任何建议!

1 个答案:

答案 0 :(得分:0)

由于错误不够清楚,添加类型检查将改善对用户的反馈,如果他们不提供作为字符串的范围。

// to be used in the spreadsheet like ImportRange, 
// i.e. like this: =myImportRange( "key" ; "sheet!range" ; GoogleClock() )
// the third parameter - GoogleClock() - triggers an automatic update every minute.
// updated 2011-07-17 (ahab): better regex to strip sheetname of *outer* single quotes
function myImportRange(key ,sheetrange) {
    if (typeof(sheetrange) != "string" throw new Error("range must be a string");

    var shra = sheetrange.split("!") ;
    if (shra.length==1) shra[1]=shra[0], shra[0]="";  

    var sheetstring = shra[0].replace( /^'(.*)'$/g , "$1") // was: replace( /'/g , "") ; updated 2011-07-17 (ahab)

    var rangestring = shra[1] 

    var source = SpreadsheetApp.openById( key )    

    if ( sheetstring.length==0 ) sheet = source.getSheets()[0] ;
    else sheet = source.getSheetByName( sheetstring ) ;

    return  sheet.getRange( rangestring ).getValues(); 
} 
相关问题