2016-08-11 52 views
0

我寫了一個基於對這裏找到的代碼下面的循環:爲什麼for循環在谷歌的腳本不能正常工作

How do I iterate through table rows and cells in javascript?

function myRowLooper() { 
var inputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('INPUT'); 
var inputRange = inputSheet.getRange(2,inputSheet.getLastColumn(),inputSheet.getLastRow()); 

    for (var i = 0, row; row = inputRange.rows[i]; i++) { 
     Logger.log(row); 
     for (var j = 0, col; col = row.cells[j]; j++) { 
      Logger.log(col); 
    } 
} 
} 

但是當我把它應用到谷歌的腳本,它拋出一個錯誤: 「TypeError:無法從undefined讀取屬性」0「。」

這是什麼造成的?

+0

行0的Looger.log的輸出是什麼? –

回答

0

因爲您無法從'inputRange.rows [i]'獲取任何值。

你可以做這樣的事情:

function myRowLooper() { 
    var inputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); 
    for(var i = 1; i<=inputSheet.getLastRow(); i++){ 
    for(var j = 1; j<=inputSheet.getLastColumn(); j++){ 
     var cell = inputSheet.getRange(i,j).getValue(); 
     Logger.log(cell); 
    } 
    } 
} 

希望這會幫助你。

謝謝。

0

你的代碼是非常草率的。您正試圖結合變量並不必要地壓縮,這會導致代碼中出現錯誤。如果導致錯誤和錯誤,增加「效率」是沒有用的。

嘗試這樣的事情 -

function yourFunction() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Name"); 
    var lastRow = sheet.getLastRow(); 
    var lastColumn = sheet.getMaxColumns(); 
    var conditionToCheckColumn = (lastColumn - 1); 
    var conditionRange = sheet.getRange(2, checkColumn, (lastRow - 1), 1); 
    var check = checkRange.getValues(); 
    for (var i = 0; i < check.length; i++) { 
    if (check[i] == condition) { 
     continue; 
    } else { 
     //your code here 
    } 
    } 
} 

這將拉動上,你可以檢查它的一系列的價值/條件,如果匹配,它什麼都不做。如果不匹配,它將執行代碼。然後它將循環到下一行,直到檢查範圍中具有數據的最後一行。

被警告 - 儘管單元顯然是空的,函數仍然被視爲數據。如果您的工作表使用= QUERY這樣的函數,除非您的= QUERY(或其他fx())具有特定的上限,否則您將擁有無限循環的代碼。

+0

感謝您的回覆。閱讀文檔後,我可以看到您的方法的價值。但是,當我運行代碼時,它說「checkColumn」,「checkRange」和「條件」未定義。 –

+0

是的,您需要準確指定您想要定義範圍和條件的位置和方式。所提供的代碼故意含糊不清,無法爲您解決問題。請查看代碼並進行修改以適應您的實際需求。 – MasterCrander