Получить строки из данных электронной таблицы, используя скрипт приложения 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 на имя пользователя и отображать их, используя метки в app-script (который работает как веб-сервис).

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

РЕДАКТИРОВАТЬ

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

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

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 меткой, используя цикл for

for (i in labels) { ...

Что ж, вы можете рассмотреть использование ячейки и использовать формулу "Запрос". Предположим, что Date находится в столбце 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
Другие вопросы по тегам