1

テキストドキュメント内の一意の文字列を置き換える必要があるので(実際には多くの文字列ですが、それぞれが一意です)、試しdoc.editAsText().replaceText(old$,new$);ましたが、うまくいきませんでした...これが使用するコードです。これは、必要な文字列を含むテンプレートをコピーします。ループで置き換えられます。

  var doc = DocumentApp.openById(docId);;
  var lib=["$titre","$nom","$prénom","$rue","$code","$ville","$pays"]
    for(nn=1;nn<=selrange.length;++nn){
      for(ll=0;ll<lib.length;++ll){
        var old$ = (lib[ll]+nn).toString();
        var new$ = selrange[nn-1][ll].toString();
        var test = old$.replace(old$,new$);
Logger.log(new$+" = "+test);// this is indeed the new value
        doc.editAsText().replaceText(old$,new$);
         }
       }
Logger.log(doc.getText())
   }  

ロガーは、変更されていないドキュメントのコンテンツを表示します。私は何が欠けていますか?

編集:情報については、Henriqueの答えの後にここに動作するコードがあります:

    for(page=0;page<feuilles;++page){
      var today=Utilities.formatDate(new Date(),FUS1,"dd-MM-yyyy")+"__"+Utilities.formatDate(new Date(),FUS1,"HH:mm")
      var docname="IMPRESSION_page_"+Number(page+1)+"_"+today;
      var docId=DocsList.copy(doctemplate,docname).getId();
      var doc = DocumentApp.openById(docId);;
      var lib=["titre","nom","prénom","rue","code","ville","pays"]
        for(nn=1;nn<=16;++nn){
          for(ll=0;ll<lib.length;++ll){
            var olditem = ("#"+lib[ll]+nn+"#");
            var newitem = selrange[nn-1+page*16][ll];
              if(newitem==""){newitem="   "}
//Logger.log(olditem + "   *"+newitem+"*")
              doc.replaceText(olditem,newitem);
         }
       }
      Utilities.sleep(300); // wait a bit between each doc creation
    } 
4

1 に答える 1

7

問題はDocument.replaceText、文字列を渡しても関数が正規表現を作成することです(これは、実際にはドキュメントの例にあります:)。そして、String.replaceあなたのテストの関数はそうではありません。違いは次のとおりです。

var doc = DocumentApp.openById(docID);
var old$ = '$sample';
var new$ = '$replaced';
var test = 'foo $sample bar';
Logger.log(test.replace(old$, new$)); //old is treated as literal
Logger.log(test.replace(new RegExp(old$), new$)); //this is what replaceText does
doc.replaceText(old$,new$);
Logger.log(doc.getText());

そして、$は正規表現の特殊文字であるため、置換を台無しにしています。ちなみに、これはテキストの終わりを意味し、終わりの後にテキストを一致させようとしても機能しないため、基本的に検索と置換は何もしません。

これを修正するには、「\ $ sample」などのすべての文字列でエスケープするか、$この文字をフィールド区切り文字として使用しないでください。これは非常に悪い選択です。#、または正規表現で特別な意味を持たないその他の文字を使用します。

ちなみに、あなたold$new$変数でさえ、それは醜いように見えます。しかし、それはおそらく私だけです:)

于 2012-05-17T01:09:29.690 に答える