2012-10-25 31 views
3

我正在嘗試使用ahab的自定義Google Apps腳本myImportRange。我不熟悉編寫自定義腳本,但我也跟着說明在現有的職位,複製並粘貼以下到腳本編輯器:使用myImportRange自定義電子表格函數 - TypeError:無法調用未定義的方法「split」

// 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: Cannot call method "split" of undefined. (line 6)

如果這是一個重複的問題,我很抱歉,我發現許多與這個主題有關的主題,不幸的是,我的知識,如果這種事情是如此基本,我不能計算出其他答案如何與我的腳本相關。

我非常感謝任何建議!

+0

您是否以字符串的形式提供打印格式,例如:作爲「Sheet1!C20:G2000」? myImportRange函數的語法與通常的ImportRange函數非常相似,即您必須提供key和sheetrange作爲字符串 – Ben

回答

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(); 
} 
相關問題