26 Stimmen

Wie man ein Google Apps Skript in mehreren Dokumenten verwendet

Ich habe ein Google Apps-Skript, das ich in mehreren Dokumenten verwenden möchte. Möglicherweise möchte ich es auch später in diesen Dokumenten ändern, daher ist es unerlässlich, dass ich das gleiche Skript in all diesen Dokumenten verwende und nicht Kopien dieses Skripts.

Ich kenne die unten stehende Frage, die als Duplikat gelten könnte, aber ich zögere, ihre Antwort anzunehmen.

Google Apps Script - Wie kann man ein Skript in mehreren Containern haben?

Also ist meine Frage: Gibt es wirklich keine Möglichkeit, ein Skript unter mehreren Google-Dokumenten zu teilen? Muss man wirklich für jedes Dokument ein neues Skriptprojekt erstellen und den Code von einem anderen kopieren und einfügen? Und wenn man einen Fehler in einem von ihnen behebt, muss man sich daran erinnern, welche Dokumente dieses Skript verwenden, den Skript-Editor in jedem von ihnen öffnen und den neuen Code kopieren und einfügen?

7voto

Serge insas Punkte 44609

Bibliotheken wurden speziell für diese Situation entwickelt... bitte werfen Sie einen Blick auf die Dokumentation hier.

4voto

Giuseppe Punkte 4926

Ich habe eine Lösung für mich gefunden. Sie ermöglicht es, beliebig viele Skripte an ein Art Master-Dokument (nennen wir es MyScripts) anzuhängen. Keine Bibliotheken, kein Veröffentlichen erforderlich.

Erstellen Sie ein Dokument und benennen Sie es MyScripts (oder wie auch immer). Der Inhalt des Dokuments kann leer sein, oder Sie könnten dort einige Anweisungen schreiben. Fügen Sie dann den folgenden Code in den Skript-Editor von MyScript ein:

// fügt ein Menü zur Benutzeroberfläche des Master-Dokuments hinzu
function onOpen() {
  DocumentApp.getUi()
             .createAddonMenu()
             .addItem('Etwas tun', 'etwasMachen')
             .addItem('Etwas anderes', 'etwasAnderes')
             .addToUi()
}

// gibt das Ziel-Dokument basierend auf seiner URL zurück
// kann angepasst werden, um stattdessen die DocumentId zu verwenden
function findDoc(prompt) {
  var ui = DocumentApp.getUi();
  var pro = ui.prompt(prompt, 'Dokument-URL:', ui.ButtonSet.OK);
  var url = pro.getResponseText();
  return DocumentApp.openByUrl(url);
}

function etwasMachen() {
  var doc = findDoc('Etwas tun');
  if (doc) {
    // etwas mit dem Ziel-Dokument machen
    var len = doc.getBody().getText().length;
    DocumentApp.getUi().alert('Das Dokument ist ' + len + ' Zeichen lang')
  }
}

function etwasAnderes() {
  var doc = findDoc('Etwas anderes');
  if (doc) {
    // etwas anderes machen
  }
}

Die Funktion onOpen() sollte selbsterklärend sein.

findDoc() ist der eigentliche Hack. Es fordert den Benutzer nach der URL des Ziel-Dokuments auf, dem Dokument, auf das wir reagieren möchten. Wenn die URL gültig ist, gibt findDoc() das entsprechende Dokumentenobjekt zurück.

Die letzten beiden Funktionen sind nur Platzhalter und sollten durch Ihren eigenen Code ersetzt werden, aber beachten Sie, wie findDoc() am Anfang jedes Funktionsaufrufs steht.

Wenn Sie ein Skript gegen ein Dokument ausführen möchten, kopieren Sie seine URL, öffnen Sie dann MyScripts, wählen Sie den entsprechenden Add-Ons-Menüpunkt aus, fügen Sie die URL ein und klicken Sie auf OK.

Bitte beachten Sie, dass Sie beim ersten Versuch, ein Skript auf diese Weise auszuführen, eine Warnmeldung erhalten werden. Stellen Sie einfach sicher, dass Ihr etwasMachen(), Ihr etwasAnderes() usw. nur sicheren Code enthalten, bevor Sie die Warnungen ignorieren und die Skripts ausführen.

4voto

Rubén Punkte 32507

Ab dem 6. September 2020 bedeutet die Verwendung einer Bibliothek, ein Projekt zu erstellen, um den Verweis auf die Bibliothek hinzuzufügen und einige Codes hinzuzufügen, um die Bibliotheksfunktionen im Containerdokument verfügbar zu machen. Der einzige Weg, um ein Skript auf mehreren Dokumenten verfügbar zu haben, ohne ein Skript auf ihnen erstellen zu müssen und ohne Einschränkungen, ist die Erstellung eines G Suite Editor-Add-Ons.

Ab Dezember 2019 werden alle G Suite Editor-Add-Ons im G Suite Marketplace veröffentlicht. Sie könnten ein Add-on nicht gelistet machen und nur Benutzer mit G Suite-Konten können Add-Ons veröffentlichen, die darauf beschränkt sind, von anderen Benutzern aus der gleichen Domäne sichtbar zu sein.

Test als Add-On

Wenn Sie nicht möchten, dass ein Add-On veröffentlicht wird, können Sie die Option Run > Test als Add-On verwenden, aber es gibt mehrere Einschränkungen. Z. B. Folgendes kann nicht in diesem Modus verwendet werden:

  • Trigger
  • Benutzerdefinierte Funktionen

Master-Projekt

Wie in Giussepes' Antwort vorgeschlagen, ist es ratsam, ein "Masterprojekt" zu verwenden, um Ihre Skripts zu speichern. Dies hat auch mehrere Einschränkungen

  • Die meisten aktiven Methoden können nicht verwendet werden
  • Einfache Trigger können nicht verwendet werden, aber es ist möglich, installationsspezifische Trigger programmatisch zu erstellen
  • Benutzerdefinierte Funktionen funktionieren nur in Tabellenkalkulations-Add-Ons und Skripts, die an die Tabellenkalkulation gebunden sind und die benutzerdefinierte Funktion verwenden

Sei resigniert

Wenn Sie sich damit abfinden müssen, ein Projekt in jedem Ihrer Dokumente zu haben, könnten Sie die Last der Aktualisierung der Skripts reduzieren, indem Sie CLASP oder den Google Apps Script Assistant für GitHub verwenden

Ressourcen

1voto

user3264007 Punkte 145

Entschuldigung, mein Ruf war zu niedrig, um einen Kommentar hinzuzufügen. :( In Giuseppes Antwort verwenden Sie dies, um Dokumente zu finden - geringfügige Änderung

function findDoc(pros) {
  var ui =  DocumentApp.getUi();
  var pro = ui.prompt(pros, 'URL:', ui.ButtonSet.OK);
  var url = pro.getResponseText();
  return DocumentApp.openByUrl(url);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X