Извлечение строк из данных электронной таблицы с помощью приложения google script
Я использую приложение Google script для записи данных формы в электронную таблицу. Теперь я хотел бы получить значения из Excel, которые соответствуют условиям (например, отфильтрован по дате, имени пользователя) и отображать их с помощью приложения script.
В моей таблице
+-------------+-----------+----------------------+
| 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
по имени пользователя и отобразить их с помощью меток в приложении script (который работает как веб-служба).
Все мои поисковые запросы возвращают решение, используя SpreadsheetApp.getActiveSheet().getDataRange();
, который, я думаю, не оптимизирован, чтобы отображать одну запись из 1000+ строк в листе.
ИЗМЕНИТЬ
Сейчас я использую только .getValues()
. И приведенные здесь данные относятся к образцу; мой настоящий лист имеет 15 столбцов и 5000+ строк. И в конечном итоге это вырастет до миллионов, поскольку это приложение для расписания. Мне интересно, есть ли другой способ getValues()
отфильтрованных строк?
Применение формулы =Filter
в ячейке tmp также будет проблемой, поскольку script может использоваться одновременно числом людей.
Ответы
Ответ 1
Самый простой способ и тот, который я знаю, - это:
получить значения в массиве с помощью
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]] );
затем имея все ваши данные в этом массиве, вы можете заполнить панели Ui меткой, используя цикл for
for (i in labels) { ...
Ответ 2
Ну, вы можете рассмотреть использование ячейки и использовать на ней формулу "Запрос". Предположим, что дата находится в столбце A, имя пользователя = столбец B, комментарий - столбец C, а пустая ячейка - D1, ваш script будет выглядеть следующим образом:
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