2

body.replaceText('TextA', 'TextB'); を呼び出して、テンプレート ドキュメントのコピーのプレースホルダーをテキストに置き換える Google Apps スクリプトがあります。

今、画像を含むように拡張したいと思います。誰もこれを行う方法を知っていますか?

ありがとう、アンドレイ

編集:私のスクリプトが何をするのかを明確にするためです。スプレッドシートで作成された Google フォームがあります。フォームの送信時に実行され、フォームに対応するシートをトラバースし、未処理の行を見つけ、対応するセルから値を取得して Google ドキュメントのコピーに入れるスクリプトを作成しました。Google フォームの一部のフィールドは複数行のテキスト フィールドであり、'\r\r' はそこから来ています。

エレガントではありませんが、これまでのところうまくいきます:

// replace <IMG src="URL"> with the image fetched from URL
function processIMG_(Doc) {

  var totalElements = Doc.getNumChildren();

  for( var j = 0; j < totalElements; ++j ) {

    var element = Doc.getChild(j);
    var type = element.getType();

    if (type =='PARAGRAPH'){
      var par_text = element.getText();

      var start = par_text.search(new RegExp('<IMG'));
      var end = par_text.search(new RegExp('>'));
      if (start==-1)
        continue;

      // Retrieve an image from the web.
      var url = getURL_(par_text.substring(start,end));
      if(url==null)
        continue;

      // Before image
      var substr = par_text.substring(0,start);
      var new_par = Doc.insertParagraph(++j, substr);

      // Insert image
      var resp = UrlFetchApp.fetch(url);
      new_par.appendInlineImage(resp.getBlob());

      // After image
      var substr = par_text.substring(end+1);
      Doc.insertParagraph(++j, substr);

      element.removeFromParent();
      j -= 2; // one - for latter increment; another one - for increment in for-loop
      totalElements = Doc.getNumChildren();      
    }      
  }
}
4

1 に答える 1

5

これは、(大まかに)あなたが望むことを行うコードの一部です。

(おそらく他の方法があり、確かにいくつかの機能強化が必要ですが、一般的な考え方はそこにあります)

画像が挿入される場所をマークするためにドキュメントで「###」を使用することを選択しました。画像は Google ドライブ (より正確には「一部の」Google ドライブ) にある必要があります。以下のコードはドキュメントを使用します。私は共有し、私も共有した画像を試してみることができます。ここにドキュメントへのリンクがあります。テストの前に、画像を削除して ### をどこかに置くことを忘れないでください (あなたの前に誰かがコードを実行したことがある場合) ;-)

function analyze() { // just a name, I used it to analyse docs
  var Doc = DocumentApp.openById('1INkRIviwdjMC-PVT9io5LpiiLW8VwwIfgbq2E4xvKEo');
  var image = DocsList.getFileById('0B3qSFd3iikE3cF8tSTI4bWxFMGM')
    var totalElements = Doc.getNumChildren();
    var el=[]
    for( var j = 0; j < totalElements; ++j ) {
      var element = Doc.getChild(j);
      var type = element.getType();
Logger.log(j+" : "+type);// to see doc's content
       if (type =='PARAGRAPH'){
       el[j]=element.getText()
       if(el[j]=='###'){element.removeFromParent();// remove the ###
         Doc.insertImage(j, image);// 'image' is the image file as blob 
         }
       }
    }
}

EDIT : このスクリプトを機能させるには、 ### 文字列を段落内で単独にする必要があり、前後に他の文字を入れないでください... ENTER で新しい行を強制するたびに、ドキュメントは新しい段落を作成することに注意してください。

于 2012-06-26T16:56:12.127 に答える