2013-04-05 143 views
0

我是新的谷歌腳本,並遇到我無法弄清楚的東西。我試圖命名一個範圍,希望最終將其放入一個數組中,並用數據填充另一個表。谷歌腳本的電子表格 - 錯誤:參數必須是範圍

我遇到了命名該範圍的問題。我希望最終能夠遍歷並命名多個範圍,所以我希望能夠爲行號使用變量。

如果我試試這個:

var rngProject = "A8:Y21"; 
var RngName = "project1"; 

然後一切正常,我有一個數組中的數據。但是,如前所述,我想使用行號的變量以及範圍名稱,如下所示。

如果我試試這個:

var rngProject = "A" + strtRow + ":Y" + totRows + strtRow - 1; 
    var RngName = "project" + toString(i); 

在此行中:

var rng_to_name = active_spreadsheet.getSheetByName(sheet_name).getRange(address); 

我收到錯誤: 「參數必須是一個範圍。」在調試器中,地址值顯示爲NaN,所以我認爲這是不對的。但我也嘗試過使用strRange(註釋如下),並且在同一行上出現相同的錯誤。

有沒有辦法讓我把這個值轉換成範圍類型,還是有其他的我做錯了?

function namePrjRange() { 
    var i = 1 
    var strtRow = 8; 
    var shtName = "USER INPUT by week: TEST"; 
    var totRows = 14; 
    //var strRange = "A" + toString(strtRow) + ":Y" + toString(totRows + strtRow - 1); 
    var rngProject = "A" + strtRow + ":Y" + totRows + strtRow - 1; 
    var RngName = "project" + toString(i); 

    //Logger.log(strRange); 
    Logger.log(rngProject); 
    Logger.log(RngName); 

    nameRange(shtName, rngProject, RngName); 
} 

// Given a sheet name (assumed to be in the active spreadsheet, an address using "A1"  notation, 
// and a name string, assign that name to the range address in the given sheet. 
function nameRange(sheet_name, address, rng_name) { 
    // Create an spreadsheet object. 
    Logger.log("Entered nameRange function") 
    var active_spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 
    // Get a range object by firstly getting a sheet object from the spreadsheet object and then pass the 
    // "address" argument to the sheet "getRange()" method. 
    var rng_to_name = active_spreadsheet.getSheetByName(sheet_name).getRange(address); 
    // Use the spreadsheet object method "setNamedRange()" to assign a range name to a range object. 
    Logger.log("About to set Named Range"); 
    Logger.log(rng_name); 
    Logger.log(rng_to_name); 
    active_spreadsheet.setNamedRange(rng_name, rng_to_name); 
} 

回答

1

用途:

var rngProject = "A" + strtRow + ":Y" + (totRows + strtRow - 1);

正如你在這裏執行字符串連接,解析器將試圖來連接一切融合在一起(即沒有實際增加totRows到strtRow),並最終放棄它的包當它到達減號時,它不是有效的字符串運算符。所以你只需要在算術部分放置括號。

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Expressions_and_Operators#String_operators

+0

就是這樣!非常感謝! – brl8 2013-04-08 15:22:53

相關問題