2017-12-28 18 views
1

私のコードは、現在、Googleドキュメントで定義済みの開始タグを検索し、対応する終了タグを探します。タグの位置は変数に保持されます。コピーしたGoogleドキュメント要素を保存するにはどうすればよいですか?

次に、コードが実行され、タグ間のすべての要素が2番目のGoogleドキュメントにコピーされます。これは期待どおりに動作します。

ただし、ソースドキュメントに保持されているデータは100ページになっています。したがって、タグを検索するスクリプトでは、予想よりも数秒かかる場合があります。これは、タグを見つけてそれらの間に要素をコピーするのにかかる時間を増加させる。

私の解決策は、要素を一度取り出してFirebaseやFirestoreのようなものに保存するためのマスタースクリプトを作成することです。それから私はDBから直接要素にアクセスできます。私はGoogleのドキュメント要素を格納するためにいくつかのアプローチを試みました。

これは要素を取得する方法です。

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

  • 要素を配列に格納してから、配列を反復処理します。同じ実行時間で 内で正常に動作します。
  • 要素をドキュメントキャッシュに格納します。動作しません。
  • 要素をブロブとして保存しようとします。正しく行う方法はわかりません。
  • 要素をストライ化してドキュメントキャッシュに保存します。動作しません。

Googleドキュメントの要素を後で使用するために保存しようとした人はいますか?

答えて

0

Googleドキュメントの要素には、Apps Script環境外で使用できる表現がないようです。後で必要とする要素を格納するために、他の小さな文書を使うことをお勧めします。スクリプトは必要に応じて文書を作成し(up to 250 per day)、IDで後でアクセスすることができます。 IDは文字列です。これらの要素を配置したキーに関連付けることができます。この情報は、JSON文字列にしてScript Propertiesに格納することができます。

appendElementメソッドがないので、最初に型別に要素を識別してからターゲットに追加する必要があります(すべての型が追加メソッドでサポートされているわけではありません)。

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 
} 
関連する問題