2013-04-24 4 views
1

Когда я использую sheet.getLastRow(); он возвращает последнюю строку, содержащую контент.Как найти последнюю строку диапазона?

Но когда я использую range.getLastRow(); он возвращает последнюю строку диапазона и не рассматривает содержимое в нем.

Может кто-нибудь предложить способ найти последнюю занятую ячейку в диапазоне.

Заранее спасибо.

ответ

0

Вы можете создать цикл в списке, который приходит как return getRange(). GetValues ​​() проверяет, пуста ли текущая позиция в списке.

function getLastRowWithTextInARange() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var range = sheet.getRange(1,1,5,1).getValues(); 

    for (var i=0; i<range.length; i++){ 
    if (range[i][0] == ""){ 
     Logger.log("Last row with content in the range."); 
     break; 
    } else { 
     Logger.log(range[i][0]); 
    } 
    } 
} 
0

Я дал кусок кода как часть previous post который возвращает заполненный диапазон (для одного столбца). Вы можете проверить это, как показано ниже:

function readRows() { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2'); 

    var values = getPopulatedRange(sheet,"B").getValues(); // assuming Col B is your range 
    var lastCell = "B" + values.length; 
    var lastCellValue = values.reverse()[0]; 

    Logger.log(values); // gives all values upto the final populated in your range 
    Logger.log(lastCell); // shows the last cell in notation like: B8 
    Logger.log(lastCellValue); // shows the last populated cell value 

}; 

function getPopulatedRange(ss,column) { //Returns the range in a single column from row 1 to the last populated cell in that column 
    var lastRow = ss.getMaxRows(); 
    var values = ss.getRange(column + "1:" + column + lastRow).getValues(); 
    for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {} 
    return ss.getRange(column + "1:" + column + lastRow); 
} 
0

Предыдущие ответы обсуждает с ситуацией, целевой диапазон охватывает только один столбец, функция, обеспечиваемая ниже, что я привык:

var targetRange = SpreadsheetApp.getActiveSheet().getRange(1,1,4,3); 
var lastRowOfTargetRange = getLastRowOfRange(targetRange); 


function getLastRowOfRange (range) { 

    var rangeValues = range.getValues(); 
    var columns = range.getNumColumns(); 
    var lastRowHasContent = 0; 

    for (var i = 0; i < columns; i++) { 
    var rowsCount = 0; 
    while (rangeValues[rowsCount][i]) { 
     rowsCount++; 
    } 
    if (rowsCount > lastRowHasContent) 
     lastRowHasContent = rowsCount; 
    } 

    return lastRowHasContent; 

} 
Смежные вопросы