Скрипт приложения Документы Google Заменить текст в теле - PullRequest
0 голосов
/ 22 декабря 2018

У меня проблемы с заменой текста в Google Doc с помощью App Script.

Внутри документа у меня есть определенные теги / токены, такие как ${TOKEN.SUBTOKEN}.Я получаю документ в виде текста и извлекаю все TOKEN в виде списка с регулярным выражением без проблем, но когда я хочу использовать функцию replaceText, у меня возникают проблемы.Когда я выполняю строку replaceText, она не меняет значение в документе, а возвращает элемент из документа.Я не могу найти способ заменить целевой текст.

var doc = DocumentApp.openById(docId);
var docBody = doc.getBody();
// tokenValues is the Object that contains the values to replace. 
var fields = docBody.getText().match(/\$\{[a-z0-9\.\_]+\}/gi);
  for (var i = 0; i < fields.length; i++ ) {
    fields[i] = fields[i].substring(2, fields[i].length-1);
  }
for (var i; i < fields.length; i++) {
    Logger.log(docBody.replaceText(new RegExp('\\${ *' +  fields[i].replace('/\./g', '\.') + '\ *}', tokenValues[i]));
}

Как мне к этому подойти, у меня проблемы с этим, потому что документация не такая явная (или, может быть, я не понимаю)

1 Ответ

0 голосов
/ 22 декабря 2018

Я сделал что-то похожее на ваш вопрос.

Вот текст:

{{ClientName}} would like to have a {{Product}} {{done/created}}. The purpose of this {{Product}} is to {{ProductPurpose}}. We have experience with such testing and development, and will develop and test the {{Product}} for {{ClientName}}.

Вот код:

function searchReplace(){
  var regex1=new RegExp('{{([a-zA-Z/]+)}}','g');
  var tA=[];
  var srchA=[];
  var fldA=[];
  var s=DocumentApp.getActiveDocument().getBody().getText();
  while((tA=regex1.exec(s))!==null){//get all fields
    fldA.push(tA[1]);
  }
  for(var i=0;i<fldA.length;i++){//Get unique fields
    if(srchA.indexOf(fldA[i])==-1){
      srchA.push(fldA[i]);
    }
  }
  var doc=DocumentApp.getActiveDocument();
  var body=doc.getBody();
  for(var i=0;i<srchA.length;i++){
    var searchPattern=Utilities.formatString('\\{\\{(%s)\\}\\}', srchA[i]);//need double backslashes here.
    var prompt=Utilities.formatString('Enter Replacement for %s',srchA[i]); 
    var resp=DocumentApp.getUi().prompt('Replacement Text',prompt , DocumentApp.getUi().ButtonSet.OK_CANCEL)
    if(resp.getSelectedButton()==DocumentApp.getUi().Button.OK){
      body.replaceText(searchPattern, resp.getResponseText());//replaces all instances of the field
    }
  }
}
...