2015-03-20 3 views
1

Я хочу найти первую пустую ячейку в диапазоне. Этот код работает, за исключением того, что, как представляется, связан с колонки B.Скрипт Google Таблиц - получить первую пустую ячейку

function selectFirstEmptyRow() { 
 
    var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
 
    sheet.setActiveSelection(sheet.getRange("D"+getFirstEmptyRow())) 
 
} 
 

 

 

 
function getFirstEmptyRow() { 
 
    var sheet = SpreadsheetApp.getActiveSheet(); 
 
    var range = sheet.getDataRange(); 
 
    var values = range.getValues(); 
 
    var row = 26; 
 
    for (var row=26; row<values.length; row++) { 
 
    if (!values[row].join("")) break; 
 
    } 
 
    return (row+1); 
 
}

Когда я запустить его, он выбирает ячейку в D, однако находит заготовок на основе B.

Скажем, мы работаем в строках 10-20. В столбце B есть вещи в 10-12. Я запускаю это (что должно выполняться на D, насколько я могу видеть), он выберет D13 (потому что в B10: B12 есть вещи. Хотя ничего нет в D, он должен выбрать D10.

ОБНОВЛЕНИЕ :: :.

Так что я сделал некоторые изменения, которые вы предложили

function selectFirstEmptyRow() { 
 
    var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
 
    sheet.setActiveSelection(sheet.getRange("B"+getFirstEmptyRow())) 
 
} 
 

 

 
function getFirstEmptyRow() { 
 
    var sheet = SpreadsheetApp.getActiveSheet(); 
 
    
 
    var lastRow = sheet.getLastRow(); 
 
    //getRange(row, column, numRows, numColumns) 
 
    var range = sheet.getRange(28, 2, lastRow - 28, 1); 
 
    
 
    var values = range.getValues(); 
 
    var row = 28; 
 
    
 
    for (var i=0; i<values.length; i++) { 
 
    if (!values[i].join(" ")) break; 
 
    } 
 
    return (row+1); 
 
}

он всегда выбирает строку 29 (я предполагаю, потому что он, начиная с 28 и у меня есть возвращение (строка + 1)

?

ответ

0

Эта линия:

var row = 26; 

жесткие коды исходного числа 26. отсчета начинается цикл в 26:

for (var row=26; row<values.length; row++) { 

Если вы хотите контур в цикле число раз от начальной строки 10, до последней строки, а затем изменить эту строку следующим образом:

for (var i=0; i<values.length; i++) { 

Ваш код был на самом деле определения переменной row дважды. Однажды чуть выше цикла for и один раз внутри цикла for. Переменная row не должна использоваться в цикле вообще. Цепь for нуждается в собственном счетчике.

В этой строке кода:

for (var row=26; row<values.length; row++) { 

Массив JavaScript присоединиться() метод возвращает строку из массива.

getDataRange() метод из этой строки кода:

var range = sheet.getDataRange(); 

Возвращает два одномерный массив все строк и столбцов в листе. Диапазон начинается в левом верхнем углу данных на листе. Если вы хотите исключить столбцы до и включите столбец C, используйте другое значение для получения другого диапазона.

Итак, я меняю бы эту линию:

var range = sheet.getDataRange(); 

Возможно изменить код на:

var lastRow = sheet.getLastRow(); 
//getRange(row, column, numRows, numColumns) 
var range = sheet.getRange(10, 4, lastRow - 10, 1); 

Приведенный выше код будет получить двумерный массив данных, начиная в строке 10, столбец 4, и получить 10 меньше строк, чем общее количество строк, и получить только один столбец данных из столбца D (4-й столбец)

+0

Спасибо за ответ. Я пробовал это. Он всегда выбирает строку 27 –

+0

У вас есть лучший способ сделать это? Если так, я все уши. Я просто наткнулся на этот код, и я пытаюсь заставить его работать. –

+0

Обновленный вопрос (этот форум неуловим). Я внес некоторые изменения, но всегда выбирает строку 29, а не первую пустую ячейку, я предполагаю, что она начинается с 28, а в конце - строка + 1. –

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