Получение строк из данных электронной таблицы с помощью скрипта приложения Google

Я использую скрипт приложения Google для записи данных формы в электронную таблицу. Теперь я хотел бы получить значения из Excel, соответствующие условиям (например, отфильтрованные по дате, имени пользователя), и отобразить их с помощью сценария приложения.

В моей таблице есть

+-------------+-----------+----------------------+
| Date        | Username  | Comment              |
+-------------+-----------+----------------------+
| 2012-05-02  | palani    | My first comment     |
| 2012-05-02  | raja      | My second comment    |
| 2012-05-03  | palani    | My third comment     |
| 2012-05-03  | raja      | My fourth comment    |
+-------------+-----------+----------------------+

Теперь я хочу отфильтровать данные для 2012-05-02 по дате и raja по имени пользователя и отобразить их с помощью меток в сценарии приложения (который работает как веб-служба).

Все мои поисковые запросы возвращают решение с использованием SpreadsheetApp.getActiveSheet().getDataRange();, которое, на мой взгляд, не оптимизировано для его отображения. запись из 1000+ строк на листе.

ИЗМЕНИТЬ

Сейчас я использую только .getValues(). И данные, показанные здесь, приведены для примера; на моем реальном листе сейчас 15 столбцов и более 5000 строк. И в конечном итоге он вырастет до миллионов, поскольку это приложение для расписания. Мне интересно, есть ли другой способ getValues() отфильтрованных строк?

Применение формулы =Filter к ячейке tmp также будет проблемой, поскольку сценарий может использоваться одновременно несколькими людьми.


person palaniraja    schedule 09.05.2012    source источник
comment
К сожалению, нет возможности получить значения с примененным фильтром. Но если ваши данные вырастут до миллионов строк, сценарий не будет вашей основной задачей, поскольку электронная таблица может содержать только 400 тысяч ячеек.   -  person Henrique G. Abreu    schedule 11.05.2012


Ответы (2)


Самый простой и известный мне способ:
получить значения в массиве с помощью

var data = SpreadsheetApp.getActiveSheet().getDataRange().getValues();

затем сделать петлю

for (i in data) {

в этом цикле, чтобы проверить, совпадает ли дата (data[i][0]) с той, которую вы ищете, и совпадает ли имя (data[i][1]) с тем, которое вы ищете. И вставьте его в массив

var labels=new Array;
label.push( [data[i][0], data[i][1], data[i][2]] );

затем, имея все свои данные в этом массиве, вы можете заполнить panen Ui меткой, используя цикл for

for (i in labels) { ...
person Cartman    schedule 10.05.2012
comment
спасибо @cartman. Но у меня тысячи записей, и это кажется плохим решением. - person palaniraja; 10.05.2012
comment
Тысячи строк - это определенно очень мало, особенно с 3 столбцами. Решением здесь является получение всего сразу с помощью getValues ​​и цикла. Если мы чего-то не знаем о ваших данных или использовании. например фильтр статический, или данные есть. - person Henrique G. Abreu; 11.05.2012

Что ж, вы можете рассмотреть возможность использования ячейки и использовать для нее формулу «Запрос». Предположим, что дата находится в столбце A, имя пользователя = столбец B, комментарий - столбец C, а пустая ячейка - D1, ваш сценарий будет выглядеть так:

SpreadsheetApp.getActiveSheet().getRange("D1").setFormula('Query(A:C,"SELECT A,B,C WHERE B="' + "SomeOne'" + ',1)'; //filter the data and populate to D1 onwards    
SpreadsheetApp.getActiveSheet().getRange("D:F").getValues();//this is the filtered data
person kckoay    schedule 06.03.2013