2017-12-28 2 views
1

Mein Code sucht derzeit nach einem vordefinierten Start-Tag in Google-Dokument und sucht nach einem entsprechenden End-Tag. Die Position der Tags bleibt in einer Variablen erhalten.Wie kann ich ein kopiertes Google-Dokumentelement speichern?

Als nächstes läuft der Code durch und kopiert alle Elemente zwischen den Tags in ein zweites Google-Dokument. Dies funktioniert wie erwartet.

Die Daten im Quelldokument sind jedoch auf 100 Seiten angewachsen. Daher benötigt das Skript, das nach den Tags sucht, einige Sekunden mehr als erwartet. Dies erhöht die Zeit, die benötigt wird, um die Tags zu finden und die Elemente zwischen ihnen zu kopieren.

Meine Lösung ist, ein Master-Skript zu haben, das die Elemente einmal aufnimmt und in etwas wie Firebase oder Firestore speichert. Dann kann ich direkt von der DB auf die Elemente zugreifen. Ich habe verschiedene Ansätze zum Speichern von Google-Dokumentelementen ausprobiert.

So bekomme ich die Elemente.

var element = sourceDoc.getChild(j).copy(); // Gets Paragraph etc. 

Meine Versuche enthalten.

  • Speichern Sie das Element in einem Array und dann das Array iterieren - funktioniert gut innerhalb die gleiche Laufzeit.
  • Speichern Sie das Element im Dokumentencache - funktioniert nicht.
  • Versuchen Sie, das Element als ein Blob zu speichern - weiß nicht, wie es richtig geht.
  • Das Element segmentieren und im Dokumenten-Cache speichern - funktioniert nicht.
  • Hat jemand versucht, Google-Dokumentelemente für die Verwendung zu einem späteren Zeitpunkt zu speichern?

    Antwort

    0

    Es scheint, dass Google Document-Elemente keine Darstellung haben, die außerhalb der Apps Script-Umgebung verwendet werden kann. Ich schlage vor, andere, kleinere Dokumente zu verwenden, um die Elemente zu speichern, die Sie später benötigen. Ein Skript kann Dokumente nach Bedarf erstellen (up to 250 per day) und später über ihre IDs darauf zugreifen. Die IDs sind Zeichenfolgen. Sie können mit bestimmten Schlüsseln verknüpft werden, nach denen Sie diese Elemente gefunden haben, und diese Informationen können in den Skripteigenschaften mit JSON beschriftet und gespeichert werden.

    Da es keine appendElement Methode gibt, scheint es, dass man Elemente zuerst nach Typ identifizieren und dann an das Ziel anhängen muss (und nicht jeder Typ wird von append-Methoden unterstützt).

    function storeElements() { 
        var elements = ... // your array of elements 
    
        var storage = DocumentApp.create("storage"); // if new is needed 
        var body = storage.getBody(); 
        for (var i in elements) { 
        switch (selected[i].getType()) { 
         case DocumentApp.ElementType.INLINE_IMAGE: 
         body.appendImage(elements[i]); break; 
         case DocumentApp.ElementType.LIST_ITEM: 
         body.appendListItem(elements[i]); break; 
         case DocumentApp.ElementType.PARAGRAPH: 
         body.appendParagraph(elements[i]); break; 
         case DocumentApp.ElementType.TABLE: 
         body.appendTable(elements[i]); break; 
         case DocumentApp.ElementType.HORIZONTAL_RULE: 
         body.appendHorizontalRule(); break; 
         case DocumentApp.ElementType.PAGE_BREAK: 
         body.appendPageBreak(); break; 
        } 
        } 
        // store storage.getId(); in ScriptProperties 
    } 
    
    Verwandte Themen