it-swarm.com.de

Wie kann ich über Google Apps Script auf Daten in verschiedenen Google-Tabellen zugreifen?

Ich schreibe ein Google Apps-Skript auf meiner Google-Website und versuche, Daten zu verwenden, die auf zwei verschiedenen Registerkarten in einer Google-Tabelle bereitgestellt werden. Nach meinem Verständnis aus der Dokumentation konnte ich alle verfügbaren Methoden in der Klasse SpreadsheetApp in einem Sites-Skript verwenden, indem ich einfach die Methode openById() verwendete.

Jedenfalls habe ich versucht, dies hier zu tun

function doGet(e) {

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

    //....
}

Ich bekomme den Fehler

Die Methode setActiveSheet (. (Zeile 4) kann nicht gefunden werden.

Ich beziehe meine Arbeit auf diesen Link: Speichern von Daten in Google Spreadsheets und auch den Abschnitt Ui-Service, der unter Erstellen von Benutzeroberflächen aufgeführt ist.

Hat jemand gesehen, was ich in diesen beiden Zeilen falsch mache?

10

setActiveSheet sollte nur mit der von der Benutzeroberfläche angezeigten Tabelle verwendet werden. Dies ist eine Tabelle in einer Tabelle, die Sie in Ihrem Browser geöffnet haben.

Mit SpreadsheetApp.openById öffnen Sie eine Kalkulationstabelle, um auf ihre Daten zuzugreifen, sie wird jedoch nicht in Ihrem Browser geöffnet. Es hat keine Benutzeroberfläche.

Ich habe diese Kommentare in https://developers.google.com/apps-script/class_spreadsheetapp?hl=es-ES#openById gefunden:

// 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");

In einigen Beispielen wird davon ausgegangen, dass das Skript in Ihre Tabelle ausgeführt wird. Dies ist nicht der Fall, da Sie ein Skript als Dienst ausführen, der über eine eigene Benutzeroberfläche verfügen sollte.

19

Ich denke, @ Megabyte1024 behebt die Syntaxfehler, aber als Antwort auf Ihren Kommentar zu @YoArgentina:

Wissen Sie zufällig über eine Möglichkeit, auf Daten auf verschiedenen Registerkarten als Über einen Dienst zuzugreifen, der nicht in der Kalkulationstabelle ausgeführt wird?

Hilft diese Art von Hilfe?

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();
5
AdamL

In diesen beiden Zeilen gibt es mindestens ein Problem. Die erste besteht darin, dass die Parameter der Methode setActiveSheet ein Sheet-Klassenobjekt sind und die Methode getSheetId einen ganzzahligen Wert zurückgibt. Diese Methode (getSheetId) ist übrigens nicht dokumentiert . Das zweite Problem kann auftreten, wenn die SpreadsheetApp keine aktive Kalkulationstabelle hat. In diesem Fall gibt es die Option "Bitte wählen Sie zuerst eine aktive Tabelle aus." Error. Verwenden Sie die Methode SpreadsheetApp.setActiveSpreadsheet , um eine aktive Kalkulationstabelle festzulegen.

1
megabyte1024

Sie müssen auf jedes Blatt separat zugreifen. 

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