У нашей команды есть форма 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
, либо другим способом?