it-swarm.com.de

So definieren Sie eine globale Variable in Google Apps Script

Ich sehe die meisten Beispiele von Google, da sie nur Funktionen in einem einzigen riesigen Skript verwenden. 

z.B. https://developers.google.com/apps-script/quickstart/macros

In unserem Stil schreiben wir jedoch normalerweise alle Funktionen unter einem einzigen Namensraum, wie z

MyCompany = (MyCompany || {});
MyCompany.init = function () {
    Logger.log('init');  
};

function onOpen() {
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var menus = [{
        name: "Init",
        functionName: MyCompany.init
    }];
    spreadsheet.addMenu("Test", menus);
};

Wenn ich jedoch den obigen Code ausführen, wird er zurückgegeben

"MyCompany is not defined."

Wie löst man?

28
Ryan

In GAS sind globale Variablen nicht das, was sie in anderen Sprachen sind. Sie sind weder Konstanten noch Variablen, die in allen Routinen verfügbar sind.

Ich dachte, ich könnte globale Variablen für Konsistenz zwischen Funktionen und Effizienz verwenden. Aber ich habe mich geirrt, wie manche Leute hier bei SO sagten.

Die globale Variable wird bei jeder Ausführung eines Skripts ausgewertet, also nicht jedes Mal, wenn Sie Ihre Anwendung ausführen.
Globale Variablen können in einem Skript geändert werden (dh es handelt sich nicht um Konstanten, die nicht versehentlich geändert werden können), sondern werden beim Aufruf eines anderen Skripts erneut initialisiert.
Es gibt auch einen Geschwindigkeitsnachteil bei der Verwendung globaler Variablen. Wenn Sie innerhalb einer Funktion dieselbe globale Variable mehrmals verwenden, ist es schneller, eine lokale Variable zuzuweisen und diese stattdessen zu verwenden. 

Wenn Sie Variablen zwischen allen Funktionen in Ihrer Anwendung beibehalten möchten, ist die Verwendung eines cacheService am besten. Ich fand heraus, dass das Durchlaufen aller Dateien und Ordner auf einem Laufwerk eine Menge Zeit in Anspruch nimmt. Sie können jedoch Informationen zu Dateien und Ordnern im Cache (oder sogar Eigenschaften) speichern und mindestens 100-mal beschleunigen.

Die einzige Möglichkeit, globale Variablen zu verwenden, ist jetzt für einige Präfixe und für die Benennung von Widgets.

3
SoftwareTester

Globale Variablen sind zwar in GAS vorhanden, Sie müssen jedoch die Client/Server-Beziehung der Umgebung verstehen, um sie richtig verwenden zu können. Siehe dazu die folgende Frage: Globale Variablen in Google Script (Tabelle)

Dies ist jedoch nicht das Problem mit Ihrem Code. In der Dokumentation wird angegeben, dass die vom Menü auszuführende Funktion als Zeichenfolge an die Methode übergeben werden muss. Jetzt liefern Sie die Ausgabe der Funktion: https://developers.google.com/apps- Skript/Referenz/Tabelle/Tabelle # addMenu% 28String, Objekt% 29

function MainMenu_Init() {
    Logger.log('init');  
};

function onOpen() {
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var menus = [{
        name: "Init",
        functionName: "MainMenu_Init"
    }];
    spreadsheet.addMenu("Test", menus);
};
1
Tim

Ich verwende das: wenn Sie var x = 0 angeben; Vor den Funktionsdeklarationen funktioniert die Variable für alle Codedateien. Die Variable wird jedoch jedes Mal deklariert, wenn Sie eine Zelle in der Tabelle bearbeiten