2012-05-09 6 views
19

Ich verwende Google App-Skript, um Formulardaten in eine Tabelle zu schreiben. Jetzt möchte ich die Werte aus Excel holen, die Bedingungen (z. B. gefiltert nach Datum, Benutzername) entsprechen und sie mit App-Skript anzeigen.Abrufen von Zeilen aus Tabellendaten mit Google App-Skript

Meine Tabelle hat

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

Jetzt möchte ich zum Filtern von Daten für 2012-05-02 auf Datum und raja auf Benutzernamen und zeigt sie Etiketten in app-Skript (die als Web-Service ausgeführt wird).

Alle meine Suchabfragen Lösung mit SpreadsheetApp.getActiveSheet().getDataRange();, die ich denke, ist nicht optimierte Möglichkeit, einen Datensatz aus mehr als 1000 Zeilen im Blatt anzuzeigen.

EDIT

jetzt Richtig, ich bin mit .getValues() nur. Und die hier gezeigten Daten sind für Beispiel; Mein echtes Blatt hat vorerst 15 Spalten und mehr als 5000 Zeilen. Und schließlich wird es zu Millionen werden, da dies eine Arbeitszeittabellenanwendung ist. Ich frage mich, gibt es einen anderen Weg zu getValues() von gefilterten Zeilen?

Das Anwenden der =Filter Formel auf eine tmp-Zelle ist ebenfalls ein Problem, da das Skript gleichzeitig von der Anzahl der Personen verwendet werden kann.

+1

Leider gibt es keine Möglichkeit zu getValues ​​mit aufgesetzten Filter. Aber wenn Ihre Daten auf Millionen von Zeilen anwachsen, wird das Skript nicht Ihre Hauptsorge sein, da eine Tabelle nur 400 Tausend Zellen enthalten kann. –

Antwort

26

Der einfachste Weg, und die, die ich kenne, ist:

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

dann in eine Schleife

for (i in data) { 

in dieser Schleife machen mit den Werten in einem Array erhalten zu überprüfen wenn das Datum (data[i][0]) gleich dem ist, das Sie suchen, und wenn der Name (data[i][1]) demjenigen entspricht, nach dem Sie auch suchen. Und schieben Sie es auf ein Array

var labels=new Array; 
label.push([data[i][0], data[i][1], data[i][2]]); 

dann mit all Ihre Daten in diesem Array können Sie eine Panen Ui bevölkern mit Etikett mit einer for-Schleife

for (i in labels) { ... 
+0

danke @cartman. Aber ich habe Tausende von Aufzeichnungen und Schleifen, es scheint eine schlechte Lösung zu sein. – palaniraja

+0

es ist wirklich schnell Sie wissen ... – Cartman

+0

Tausende von Zeilen ist definitiv sehr wenige, speziell mit nur 3 Spalten. Mit getValues ​​und Looping alles auf einmal zu bekommen ist die Lösung. Es sei denn, wir wissen etwas über Ihre Daten oder Ihre Verwendung nicht. z.B. Der Filter ist statisch oder die Daten sind. –

4

Nun können Sie eine Zelle betrachten verwenden und Verwenden Sie die Formel "Abfrage" darauf. Datum ist in Spalte A, Benutzername = Spalte B Nehmen wir an, Kommentar ist Spalte C, während die leere Zelle ist D1, Ihr Skript wie folgt aussehen:

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 
Verwandte Themen