Pobieranie wierszy z danych arkusza kalkulacyjnego za pomocą google App script

Używam Google app script do zapisu danych formularza do arkusza kalkulacyjnego. Teraz chciałbym pobrać wartości z Excela, które pasują do warunków (np., filtrowane według daty, nazwy użytkownika) i wyświetla je za pomocą skryptu aplikacji.

Mój arkusz kalkulacyjny ma

+-------------+-----------+----------------------+
| 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    |
+-------------+-----------+----------------------+

Teraz chcę filtrować dane dla 2012-05-02 na date i raja na username i wyświetlać je za pomocą etykiet w app-script (który działa jako usługa sieciowa).

Wszystkie moje wyszukiwania zwracają rozwiązanie za pomocą SpreadsheetApp.getActiveSheet().getDataRange(); co moim zdaniem nie jest zoptymalizowanym sposobem wyświetlania jednego rekordu z ponad 1000 wierszy w arkuszu.

EDIT

W tej chwili używam tylko .getValues(). A dane pokazane tutaj są dla próbki; mój prawdziwy arkusz ma teraz kolumny 15 i wiersze 5000+. I w końcu wzrośnie do milionów, ponieważ jest to aplikacja arkusza czasowego. Zastanawiam się, czy jest jakiś inny sposób na getValues() filtrowanych wierszy?

Stosowanie formuły =Filter na komórce tmp również będzie problemem, ponieważ skrypt może być używany jednocześnie przez liczbę ludzi.

Author: zessx, 2012-05-09

2 answers

Najprostszym sposobem, i jedynym, który znam, jest:
pobranie wartości w tablicy za pomocą

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

Następnie zrobić pętlę

for (i in data) {

W tej pętli, aby sprawdzić, czy data (data[i][0]) jest równa tej, której szukasz, i czy nazwa (data[i][1]) jest równa tej, której szukasz. And push it to an array

var labels=new Array;
label.push( [data[i][0], data[i][1], data[i][2]] );
Następnie, mając wszystkie dane w tej tablicy, możesz wypełnić interfejs panen etykietą za pomocą pętli for
for (i in labels) { ...
 34
Author: Cartman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-07 05:08:47

Cóż, możesz rozważyć użycie komórki i użyć formuły "Query" na niej. Załóżmy, że Data jest w kolumnie a, nazwa użytkownika = Kolumna B, komentarz to kolumna C, podczas gdy pusta komórka to D1, Twój skrypt będzie wyglądał tak:

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
 9
Author: kckoay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-06 23:53:39