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