kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
Rijo Simon
Rijo Simon
Вопрос

Проблема с getLastRow()

У меня возникла проблема с функцией getLastRow(). Я думал, что эта функция должна возвращать последний ряд, в котором есть данные. Но поскольку рабочий лист, на котором я работаю, имеет гораздо больше свободных строк ниже строк, заполненных данными, функция, похоже, выбирает последнюю свободную строку при ее выполнении вместо того, чтобы выбрать последнюю строку, содержащую данные, что может быть не одно и то же. Может ли кто-нибудь подсказать мне, как исправить эту аномалию. Это ошибка скрипта google или я не совсем понимаю, что нужно делать? Пожалуйста, задавайте дополнительные вопросы, если я не совсем ясно выразился.

4 2012-06-04T19:56:19+00:00 4
 Rubén
Rubén
Редактировал вопрос 26-го ноября 2018 в 2:29
Программирование
google-sheets
google-apps-script
javascript
Решение / Ответ
 AdamL
AdamL
4-го июня 2012 в 10:21
2012-06-04T22:21:10+00:00
Дополнительно
Источник
Редактировать
#16353775

Есть ли в листе формулы "на весь столбец"? Или формулы массива, или формулы, которые копируются по всей длине листа? Даже если эти формулы предназначены для возврата пустых ячеек внизу, getLastRow() все равно их перехватит.

Если это так, попробуйте:

function getLastPopulatedRow(sheet) {
  var data = sheet.getDataRange().getValues();
  for (var i = data.length-1; i > 0; i--) {
    for (var j = 0; j < data[0].length; j++) {
      if (data[i][j]) return i+1;
    }
  }
  return 0; // or 1 depending on your needs
}
 interestinglythere
interestinglythere
Редактировал ответ 12-го марта 2015 в 11:49
9
0
 Srik
Srik
5-го июня 2012 в 6:01
2012-06-05T06:01:56+00:00
Дополнительно
Источник
Редактировать
#16353776

Более простым способом является

var lastRow = sheet.getDataRange().getValues().length ;
0
0
 bryanp
bryanp
25-го октября 2019 в 2:31
2019-10-25T14:31:31+00:00
Дополнительно
Источник
Редактировать
#16353778

Вот еще одна версия выбранного в данный момент ответа. Это меняет внутренний цикл для объединения массива без пробелов между элементами. Это объединяет все символы в строке. Если в какой-либо позиции есть персонаж, он выбьет аналогично текущему ответу.

Я сделал несколько тестов скорости, и хотя я думал, что выбранный ответ может быть быстрее, по какой-то причине он, кажется, обрабатывается быстрее на основе моих тестов. Я полагаю, что нашел эту концепцию несколько лет назад здесь при переполнении стека, но не вижу этой ссылки сейчас.

function getLastPopulatedRow(sheetX) {
  var arrVals = sheetX.getDataRange().getValues();
  for (var i = arrVals.length-1; i > 0; i--) {
    if (arrVals[i].join('')){
      return i+1
    }
  }
  return 0; 
}
0
0
Rijo Simon
Rijo Simon
5-го июня 2012 в 7:35
2012-06-05T19:35:45+00:00
Дополнительно
Источник
Редактировать
#16353777

хотя решение Адамса будет работать при некоторой доработке, я наткнулся на другое решение этой проблемы при некотором поиске. Я увидел код, который должен был найти первую пустую строку, и я решил, что могу просто вернуть строку за первой пустой строкой, чтобы получить последнюю заполненную строку. Я прикрепляю код здесь:

function getLastPopulatedRow(sheet) {
  var cell = sheet.getRange('a1');
  var ct = 0;
  while ( cell.offset(ct, 0).getValue() != "" ) {
    ct++;
  }
  return (ct--);
}
-1
0
Похожие сообщества 20
JavaScript Jobs — чат
JavaScript Jobs — чат
26 291 пользователей
JavaScript Jobs — чат для поиска работы и людей Правила оформления: @telegram-ru/r1WQe5F1m" rel="nofollow noopener noreferrer" class="text-blue hover:text-black link" target="_blank">https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru
Открыть telegram
JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
9 470 пользователей
Помогаем друг другу разбираться с JS Правила: @js_noobs_ru/rules" rel="nofollow noopener noreferrer" class="text-blue hover:text-black link" target="_blank">https://teletype.in/@js_noobs_ru/rules Другие полезные чаты — https://github.com/goq/telegram-list или https://rudevs.network/ByKT2JwWQ
Открыть telegram
JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
7 714 пользователей
Рекомендуем сразу отключить уведомления Правила: https://git.io/JycBd См. также: @js_noobs_ru, @nodejs_ru, @ts_cool, @react_js, @electron_cool Вакансии и поиск работы: @javascript_jobs
Открыть telegram
Чат | Google Таблицы и скрипты
Чат | Google Таблицы и скрипты
4 470 пользователей
канал: @google_sheets оглавление: @google_sheet_toc заказ работы: @namokonov правила чата: t.me/google_spreadsheets_chat/242967
Открыть telegram
JavaScript.Ninja
JavaScript.Ninja
3 822 пользователей
Правила поведения проекта https://telegra.ph/Kodeks-povedeniya-proekta-JavaScriptNinja-12-15
Открыть telegram
pro.js
pro.js
3 724 пользователей
Сообщество веб (и javascript) разработчиков Чат для начинающих: @js_lib ⚠️ Вакансии - раз в неделю с вилкой зп ⚠️ Оффтоп -> @flood ❌Переход на личности ❌Троллинг ❌Реклама ❌Варез По всем вопросам: @igorz Зам: @slavik4
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 2 дня назад
2
Денис Васьков
Зарегистрирован 4 дня назад
3
Dima Patrushev
Зарегистрирован 6 дней назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией