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())
   }  

Logger 显示文档内容不变。我错过了什么?

编辑:有关信息,在 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 回答