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.
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) { ...
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
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