2012-07-30 5 views
9

Piszę Skrypt Aplikacji Google w mojej Witrynie Google i próbuję użyć danych udostępnianych na 2 różnych kartach w Arkuszu kalkulacyjnym Google. Z tego, co myślałem, że zrozumiałem z dokumentacji, mogłem użyć wszystkich dostępnych metod w klasie SpreadsheetApp w skrypcie witryn, używając tylko metody openById().Jak uzyskać dostęp do danych w różnych Arkuszach kalkulacyjnych Google za pomocą Google Apps Script?

Zresztą tutaj jest to, co starałem się zrobić

function doGet(e) { 

    var doc = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE).getActiveSheet(); 
    SpreadsheetApp.setActiveSheet(doc.getSheetId()[1]); 

    //.... 
} 

pojawia się błąd

Cannot find method setActiveSheet(. (line 4)

ja ciągnąc moją pracę poza tym linkiem: Storing Data in Google Spreadsheets a także sekcja Ui usługi wymienione w Budynku Interfejsy użytkownika.

Ktoś widząc, co robię źle w tych dwóch liniach?

+1

Sugeruję należy skorzystać z funkcji Autouzupełnianie edytora skryptów, aby uniknąć błędów składni lub przy użyciu metod, które nie dotyczą ... jest to łatwy sposób, aby rozpocząć bez irytujących błędów i/lub literówek ;-) –

Odpowiedz

18

setActiveSheet powinien być używany tylko z arkusza wyświetlanego przez UI, arkusza w otwarciu w przeglądarce arkusza kalkulacyjnego.

Z SpreadsheetApp.openById jesteś otwarciu arkusza kalkulacyjnego do wglądu do swoich danych, ale nie otworzy się w przeglądarce. Nie ma interfejsu użytkownika.

Znalazłem ten komentarz w https://developers.google.com/apps-script/class_spreadsheetapp?hl=es-ES#openById:

// The code below opens a spreadsheet using it's ID and gets the name for it. 
// Note that the spreadsheet is NOT physically opened on the client side. 
// It is opened on the server only (for modification by the script). 
var ss = SpreadsheetApp.openById("abc1234567"); 

Niektóre przykłady zakładają skrypt jest uruchomiony w arkuszu kalkulacyjnym. To nie twoja sprawa, ponieważ uruchamiasz skrypt jako usługę, która powinna mieć własny interfejs użytkownika.

+1

To trochę rozczarowuje. Czy znasz sposób uzyskiwania dostępu do danych na różnych kartach, a następnie przez usługę, która nie działa w Arkuszu kalkulacyjnym? – Mathitis2Software

+1

prostu użyć getSheetByName („nazwa arkusza”), domyślnie jest to „Arkusz1” chyba go przemianowany lub jeśli nie używając angielskiego ... na przykład w języku francuskim domyślną wartością jest „Feuille1” –

+1

getSheets() będzie przyniesie ci tablicę ze wszystkimi arkuszami w arkuszu kalkulacyjnym. –

1

Istnieje co najmniej jeden problem w tych dwóch liniach. Pierwszą z nich jest to, że parametry metody setActiveSheet to obiekt klasy Sheet i metoda getSheetId zwraca wartość całkowitą. Przy okazji ta metoda (getSheetId) to not documented. Drugi problem może się zdarzyć, jeśli arkusz kalkulacyjny SpreadsheetApp nie ma aktywnego arkusza kalkulacyjnego. W takim przypadku jest "Najpierw wybierz aktywny arkusz kalkulacyjny". błąd. Użyj metody SpreadsheetApp.setActiveSpreadsheet, aby ustawić aktywny arkusz kalkulacyjny.

0

Trzeba przejść każdy arkusz oddzielnie.

var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE); 
var sheet = ss.getSheets()[0]; // "access data on different tabs" 
ss.setActiveSheet(sheet); 
+1

"Czy znasz sposób uzyskiwania dostępu do danych na różnych kartach, a następnie przez usługę, która nie działa w Arkuszu kalkulacyjnym?" var sheet1 = ss.getSheets() [0]; –

+0

Wygląda na to, że nie mam dostępu do tej metody za pośrednictwem usługi samodzielnej. Wydaje się, że muszę użyć getSheetID(), getSheetName() i getSheetValues ​​() – Mathitis2Software

4

myślę @ megabyte1024 rozwiązuje błędy składniowe, ale w odpowiedzi na Twój komentarz do @YoArgentina:

Do you happen to know of a way to access data on different tabs then through a service not running inside the Spreadsheet?

Czy tego rodzaju pomoc?

var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE); 
var sheets = ss.getSheets(); 
// the variable sheets is an array of Sheet objects 
var sheet1A1 = sheets[0].getRange('A1').getValue(); 
var sheet2A1 = sheets[1].getRange('A1').getValue(); 
+0

Wygląda na to, że getSheets() nie jest dostępny poza skryptem Arkusz kalkulacyjny => TypeError: Nie można znaleźć funkcji getSheets w arkuszu obiektu. (linia 4) – Mathitis2Software

+1

Czy na pewno nie używasz 'var doc = SpreadsheetApp.openById (SPREADSHEET_ID_GOES_HERE) .getActiveSheet();' jak w oryginalnym wpisie? Z kodem w tym poście "ss" powinien być obiektem arkusza kalkulacyjnego, a nie obiektem arkusza. – AdamL

+0

Tak, jesteś w 100% poprawny. Zupełnie to przegapiłem. Dziękuję bardzo. – Mathitis2Software