2013-05-17 50 views
2

在這裏遇到一個奇怪的問題。我還在學習的谷歌應用程序的插件和書寫功能的出局,我的第一個真正的項目是「航運儀表板」 - 基本上,一個電子表格,我可以從UPS,聯邦快遞等跟蹤號碼,並從中解析運營商,生成一個跟蹤鏈接,這種類型的東西。我試圖設置它作爲一個功能,我可以設置被請求的數據類型(如載體),跟蹤號碼,並讓它返回所述信息。下面是我在哪裏現在:Google腳本函數參數中需要引號?

function trackingData(infoType,trackingNumber) { 

    //Regex for various carrier's tracking numbers. 
    var upsValue = /\b(1Z ?[0-9A-Z]{3} ?[0-9A-Z]{3} ?[0-9A-Z]{2} ?[0-9A-Z]{4} ?[0-9A-Z]{3} ?[0-9A-Z]|[\dT]\d\d\d ?\d\d\d\d ?\d\d\d)\b/i; 
    var fedexValue = /(\b96\d{20}\b)|(\b\d{15}\b)|(\b\d{12}\b)/; 
    var uspsValue = /\b(91\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d|91\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d)\b/i; 

    //First option: we want to know the carrier we're shipping with. 
    if (infoType == 'carrier') { 

    if (upsValue.test(trackingNumber)) { 
     return 'UPS'; 
    } 
    else if (fedexValue.test(trackingNumber)) { 
     return 'FedEx'; 
    } 
    else if (uspsValue.test(trackingNumber)) { 
     return 'USPS'; 
    } 
    else return null; 
    } 

傳遞當值的信息類型的問題來 - 如果我引用的單元格,或直接設置每個信息類型的變量,並把一個值調用公式它的時候工作得很好。不過,如果我通過將細胞中的稱之爲:

=infoType(carrier,trackingNumber) 

我得到:

error: Unknown range name carrier 

奇怪的是它的工作,如果我把它叫做:

=infoType("carrier",trackingNumber) 

(注意「載體」周圍的引用)。

我看了所有的地方找到一個解決方案,不必把周圍的公式引號當它被調用,但到目前爲止還沒有任何運氣保持。任何人有想法?

+0

角落找尋價值引號表示它的文本(又名字符串)的一大塊。如果它沒有這個界限,解析器會認爲它是一個變量或其他標識符。我認爲你堅持添加引號。 – Orangepill

+0

如果你這樣做會發生什麼:'carrier =「carrier」;信息類型(載體,trackingNumber);'? – dave

+0

@Orangepill - 這就是扔我送行的部分是,它如果它引用另一個單元格(而不是手動輸入載波作爲功能的一部分)的作品就好了。在這一點上,我假設它將是該函數的解決方法,只是不確定如何最好地做到這一點。 – John

回答

1

error: Unknown range name carrier

該錯誤消息是由於電子表格解釋函數參數的方式。

函數參數是一個參考值或數據元素(數字,日期,串)。引用可以是單細胞(A1)或範圍(A1..A23),在範圍上的不同片材(Sheet2!A1),或命名範圍。當您輸入carrier而沒有引號時,它被解釋爲命名範圍。如果你有興趣,請閱讀Named and protected ranges

下面是從序言文字小提示與Google spreadsheets function list

... don't forget to add quotation marks around all function components made of alphabetic characters that aren't referring to cells or columns.

總結 - 如果你想要一個參數作爲字符串傳遞,把雙引號就可以了。

相關問題