2015-11-22 86 views
0

我是Google Apps Script的新手,我試圖忽略for循環中的空行,但我仍然在我的log中獲取空行。這裏是我的代碼,忽略Google Apps腳本中循環的空行

function getNonEmptyRows() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet1 = ss.getSheetByName("Bldng4"); 

    var lr = sheet1.getLastRow() - 17; 

    for (var i = 1; i < lr; i++) { 
     var singleRow = sheet1.getRange(i, 1, 1, sheet1.getLastColumn()).getValues(); 
     if (singleRow.length > 0) { 
      Logger.log(singleRow); 
     } 
    } 
} 

我怎樣才能從循環中獲得唯一的非空行?糟糕的需要這個幫助。謝謝。

回答

0

您正在使用的getValues()方法始終返回2維數組,無論單元格的內容是什麼。有幾種獲取單元格內容的方法,其中之一是將範圍內容(將矩陣轉換爲單個字符串),刪除逗號(以及最終「不可見」空格)並檢查所得字符串的長度。

替換代碼可能是這樣的:

var singleRow = sheet1.getRange(i, 1, 1, sheet1.getLastColumn()).getValues().toString().replace(',','').replace(' ',''); 

這就是說,這個代碼是非常低效的,因爲它在每個循環迭代這是特別慢採用SpreadSheetApp服務。 你會在關於best practices的文檔中找到更好的方法。

+0

感謝。現在,這將起作用。 –

0

我正在尋找類似的問題的解決方案,這裏是我做的: 首先,我發現this tutorial關於如何創建谷歌應用腳​​本來消除重複的行。 下,我修改它像這樣,消除空行:

function removeEmptyRows() { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("settings"); 
    var data = sheet.getRange("A2:D").getValues(); 
    var newData = new Array(); 
    for(i in data){ 
    var row = data[i]; 
    var empty = false; 
    for(i in data){ 
     if(row.toString() == ",,,"){ 
     empty = true; 
     } 
    } 
    if(!empty){ 
     newData.push(row); 
    } 
    sheet.getRange(2, 6, newData.length, newData[0].length).setValues(newData); 
}; 

正如你可以看到,它需要A2:d範圍內,刪除空行,然後過濾糊劑數據而不空行插入範圍F2:我。 您可以嘗試使用此腳本,但可能需要將其調整爲陣列的「寬度」。要做到這一點改變以下字符串逗號數量:

if(row.toString() == ",,,"){ 

編輯: 我修改劇本有點自動調整到您的陣列的寬度:

function removeEmptyRows() { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("settings"); 
    var range = sheet.getRange("A2:C"); 
    var data = range.getValues(); 
    var dataWidth = range.getWidth(); 
    var newData = new Array(); 
    if (dataWidth<=1) { 
    var stringToCompare = ''; 
    }else{ 
    var stringToCompare = ','; 
    for (var i=0;i<dataWidth-2;i++) stringToCompare+="," 
    }; 
    for(i in data){ 
    var row = data[i]; 
    var empty = false; 
    for(i in data){ 
     if(row.toString() == stringToCompare){ 
     empty = true; 
     } 
    } 
    if(!empty){ 
     newData.push(row); 
    } 
    } 
    sheet.getRange(2, 6, newData.length, newData[0].length).setValues(newData); 
};