2013-07-29 17 views
6

Szukam sposobu programowego wypełnienia arkusza kalkulacyjnego, który filtruje dane z innego arkusza kalkulacyjnego na podstawie zalogowanego użytkownika.Czy funkcja "zapytania" w Google może być używana w skrypcie aplikacji Google?

Jestem w stanie to zrobić za pomocą funkcji zapytania w arkuszu kalkulacyjnym. ALE, nie można znaleźć sposobu wywołania funkcji zapytania ze skryptu aplikacji?

Czy to można zrobić? Doceniłbym przykładowy kod. Dzięki.

Odpowiedz

5

Nie, brak funkcji API dla funkcji zapytania, która umożliwia jej wywoływanie z Google Apps Script. (W rzeczywistości nie ma sposobu, aby zadzwonić do JAKIEJKOLWIEK funkcji arkusza kalkulacyjnego).

Możesz uzyskać podobną funkcjonalność bez pisania wszystkiego samemu. 2D Arrays Library zawiera wiele funkcji "filtrowania", które umożliwiają pobieranie pasujących wierszy.

+0

To brzmi jak coś, co powinno załatwić sprawę. Dzięki! – awsamar

+0

Mogsdad, Biblioteka tablic jest przydatna, ale nadal nie jest tak skuteczna, jak funkcja zapytania. Próbuję użyć wizualizacji/wykresów apis do tworzenia pulpitów użytkowników. Aby spersonalizować pulpit nawigacyjny, potrzebuję możliwości filtrowania danych z arkusza kalkulacyjnego na podstawie zalogowanego użytkownika. Ale filtr wymagał porównania wielu kolumn, co jest łatwe w funkcji zapytania "... gdzie col5 =" i komórka1 & "lub col6 =" i komórka2 & ". – awsamar

3

Być może dzięki formule możesz zrobić coś, czego nie potrzebujesz.

function testFormula() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[1]; 
    var cell = sheet.getRange("A1"); 
    cell.setFormula("=QUERY('Sheet0'!A1:B5;\"SELECT A, B\"; 0)"); 
} 
+0

William, dzięki za sugestię. Używam już "Zapytania" w komórce, która jest aktualizowana za pomocą skryptu. Jednak zachowanie nie jest dokładnie takie, jakiego potrzebuję. W każdym razie dzięki. – awsamar

7

Nie wiem, czy istnieje ograniczenie, że ...

function test() { 
    var req = query("=QUERY(shopT!B2:E; \"select min(E) where (B=3 or B=4 and D=2) group by C, D\")"); 

    Logger.log(req); 
} 

function query(request) { 
    var sheet = sp.insertSheet(); 
    var r = sheet.getRange(1, 1).setFormula(request); 

    var reply = sheet.getDataRange().getValues(); 
    sp.deleteSheet(sheet); 

    return reply; 
} 
+0

Dobrze. To działa dla mnie, ale wygląda niesamowicie brzydko - jak wiele obejść w aplikacjach Google. :-) –

+0

Jak jest zdefiniowane "sp" w linii: var sheet = sp.insertSheet() i jak przekazujemy tożsamość arkusza temu procesowi? przez arkuszID lub arkuszURL – Calcutta

+0

var sp = SpreadsheetApp.openById ("********************"); – zizix

Powiązane problemy