2012-05-16 1 views
1

텍스트 문서의 고유 한 문자열을 대체해야합니다 (실제로는 많은 문자열이지만 각각 고유합니다). 따라서 doc.editAsText().replaceText(old$,new$);을 시도했지만 행운을 ... 여기 내가 사용하는 코드입니다, 그것은 루프에서 교체해야 문자열을 포함하는 템플릿을 복사합니다.문서에서 replaceText (searchPattern, replacement)를 사용하는 방법 서비스/텍스트 클래스

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

로거는 문서의 내용을 변경하지 않은 것으로 보여줍니다. 내가 무엇이 누락 되었습니까?

편집 : 자세한 내용은 여기 엔리케의 대답 후 작업 코드 :

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 
    } 

답변

6

문제는 Document.replaceText 기능은 그 docs 예를 실제로입니다 (당신이 그것을에 문자열을 전달하는 경우에도 정규식을 만들 것입니다 :). 그리고 귀하의 테스트에서 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'을 사용하거나이 문자를 필드 구분 기호로 사용하지 마십시오. # 또는 regexes에서 특별한 의미가없는 다른 문자를 사용하십시오.

그런데도 old$new$ 개의 변수에서도 추악 해 보입니다. 하지만 그건 아마 내게 :)

+0

하! Stackoverflow의 구문 하이라이트조차도 새로운 변수 뒤에 $가 마음에 들지 않았습니다! 그래서, 나만이 아니야. D –

+0

Henrique, 네가 아는 것의 10 분의 1을 알았 으면 좋았을 텐데, 내 인생이 더 단순 해졌 으면 좋겠다 !! 어쨌든, 당신의 도움 덕분에 나는 그 모든 것들이 훌륭하게 작동하도록했습니다. 건배, 서지 –

+0

감사합니다. Serge,하지만 당신은 분명히 그 이상을 알고 있습니다. 아마 이걸 가지고 노는 자유 시간이 더 많을거야. 그건 그렇고, 제 대답을 "받아 들였습니다"라고 확인하십시오. 건배, Henrique –

관련 문제