получить все строки на листе с данными, где конкретный столбец пуст, с помощью скриптов Google Apps - PullRequest
0 голосов
/ 09 июня 2019

У нашей команды есть форма Google, которую мы используем для приема.После отправки запроса у меня есть сценарий GAS, который его обработает (создайте несколько файлов на Google Диске, отправьте несколько электронных писем и т. Д.).

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

В таблице, связанной с формой, в конечном итоге будут тысячи строк.

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

Я пытаюсь найти самый быстрый и эффективный способ получить все необработанные строки - строки, в которыхстолбец А пуст.

Исходные мысли:

  • Используйте Sheet.getDataRange().getValues(), чтобы получить все строки, выполнить итерацию по каждой и обработать необработанные.Затем используйте индекс строки, чтобы отметить строку, обработанную в электронной таблице.Этот способ будет работать, но после того, как в Spreadsheet появятся тысячи строк, он станет очень медленным.
  • Примените фильтр к Spreadsheet и отфильтруйте строки, в которых столбец A пуст.Я могу применить фильтр, но тогда, кажется, нет простого способа получить все видимые строки и их номер строки, чтобы я мог пометить их обработанными.

Итак, я понял, что могуиспользуйте функцию query на втором листе, чтобы показать все строки, где столбец A пуст, а затем я мог бы использовать этот лист в своем скрипте для того, что нужно обработать.

=query('Form Responses'!A:V, "SELECT * WHERE A IS NULL")

Но это не включаетномер строки из листа Form Responses, поэтому я не знаю, к какой строке следует вернуться на Form Responses, чтобы отметить обработанный.

Мне удалось добавить номер строки, используя arrayformula, например так:

=query({arrayformula(row('Form Responses'!A:V)), 'Form Responses'!A:V}, "SELECT * WHERE Col2 IS NULL")

Но это добавляет ряд строк с числами, даже если в исходной таблице нет данных в этой строке.

И если я не включу номер строки, то этовсе равно не будет работать, потому что если я вызову Sheet.getDataRange() на листе с функцией query, он вернет больше строк, чем данных.

Я создал пример листа - https://docs.google.com/spreadsheets/d/1LYpqfj3clZiaGCPgp_eRfrxhQKWambRyQn3uNCFAIpU/edit?usp=sharing.

Так есть ли быстрый / эффективный способ получить все строки с данными на листе, где определенный столбец пуст?Либо с помощью query, либо другим способом?

1 Ответ

1 голос
/ 10 июня 2019

Чтобы получить чисто ответный сценарий Apps для определения положения значения на вашем листе, либо TextFinder (я не уверен, подходит ли это для пустых полей), либо getValues(), и цикл должен быть быстрымдовольно.Вы можете рассмотреть сортировку листа до использования getValues() или сортировку массива после, в зависимости от значения, которое вы ищете, или, например, запуск цикла из самых последних записей, если вы ожидаете, что будете искатьдля новых предметов.

В качестве альтернативы, однако, если вы используете формулы Sheets, вы можете легко добавить =row() к столбцу (или, например, =arrayformula(row(A2:A))) так, чтобы результаты =query возвращали номер строки.Если по какой-либо причине невозможно добавить этот столбец к исходному листу, он также может использовать match с результатом запроса в качестве ключа поиска и исходным листом в качестве диапазона, в зависимости от того, какВаша таблица структурирована.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...