2015-10-20 20 views
1

我是新手Google Apps腳本&我試圖爲電子表格創建一個腳本,我可以獲取匹配值的範圍。但是對於像.getRow().getRange()這樣的單元格值或者類似的東西沒有任何功能,因爲它是一個字符串值。這裏是我的代碼,獲取匹配值的電子表格行

function getInfo() { 
var ss1 = sheet1.getSheetByName("Sheet1"); 
var ss2 = sheet2.getSheetByName("Rates"); 
var getCountry = ss1.getRange(ss1.getLastRow(), 11).getValue(); 
var countryRange = ss2.getRange(2, 1, ss2.getLastRow(), 1).getValues(); 
var getZone = 0; 

for (var i = 0; i < countryRange.length; i++) { 
    if (countryRange[i] == getCountry) { 
     var getrow_cr = countryRange[i].getRow(); //.getRow() doesn't apply here for string value 
     getZone = ss2.getRange(getrow_cr + 1, 2).getValue(); 
    } 
} 
Logger.log(getZone); 
} 

我怎樣才能獲得該行的匹配的字符串,這樣我可以得到匹配的單元格的值旁邊的單元格的值?

+0

你能提供更多的上下文嗎?你只需要在單行中搜索一個字符串? – kabiroberai

+0

@kabiroberai,no。我得到我需要的字符串,但是我需要字符串匹配的範圍。 –

回答

1

你爲0,而你的情況是等同於第2行。爲了保持清楚了循環變量i開始,你可以使用一個命名的變量與數據跟蹤的第一行:

var firstrow = 2; 

然後當您找到匹配項時,它所在的電子表格行就是i + firstrow

更新代碼:

function getInfo() { 
    var ss1 = sheet1.getSheetByName("Sheet1"); 
    var ss2 = sheet2.getSheetByName("Rates"); 
    var getCountry = ss1.getRange(ss1.getLastRow(), 11).getValue(); 
    var firstrow = 2; 
    var countryRange = ss2.getRange(firstrow, 1, ss2.getLastRow(), 1).getValues(); 
    var getZone = 0; 

    for (var i = 0; i < countryRange.length; i++) { 
    if (countryRange[i][0] == getCountry) { 
     var getrow_cr = i + firstrow; 
     getZone = ss2.getRange(getrow_cr, 2).getValue(); 
     break; // Found what we needed; exit loop 
    } 
    } 
    Logger.log(getZone); 
} 

由於countryRange是一個二維陣列與一個元件在每一行中,在i行以引用值的正確的方法是countryRange[i][0]。如果您只是比較countryRange[i],則您將依賴JavaScript解釋器將「行」強制爲一個String對象。

+0

謝謝。但是在我的日誌中,我仍然對getZone獲得0.0。 –

+0

好的,我調試它,'getZone'在循環內接收正確的值,但由於某種原因它沒有顯示在日誌中。任何想法爲什麼發生? –

+0

* DITTO *給你,同時我也找到了確切的'break'解決方案。謝了哥們! :) –

相關問題