Регулярное выражение в textreplace скрипт приложения Google не работает

#regex #google-apps-script

#регулярное выражение #google-apps-script

Вопрос:

Пытаюсь заменить текст дату только по дате, используя регулярное выражение, но это не работает:

 function myfunction() {  
   var SourceFolder = DriveApp.getFolderById("");
   var Files = SourceFolder.getFiles()
   var body = DocumentApp.getActiveDocument().getBody();
   while(Files.hasNext()) {
       var file = Files.next();
       body.replaceText("Date: d{2}.d{2}.d{4}", "31.10.2020")
   }  
 }
 

Спасибо

Комментарии:

1. Обратная косая черта должна быть удвоена, а значение . должно быть экранировано: .replaceText("Date: \d{2}\.\d{2}\.\d{4}", "31.10.2020")

2. Большое спасибо Виктору, что двойные обратные косые черты работают. Но скрипт не хочет изменять его во всех файлах в папке — Files.hasNext() не работает, может быть, у кого-то есть какие-то идеи по этому поводу

3. Вероятно, проблема в этой строке var body = DocumentApp.getActiveDocument().getBody(); но я больше ничего не нашел в api

4. Решите: var doc = DocumentApp.openById(file.getId()); var body = doc.getBody();

Ответ №1:

В вашем коде var body = DocumentApp.getActiveDocument().getBody(); объявляется вне цикла, поэтому вы всегда ссылаетесь на активное тело документа в своем while цикле.

Вы можете использовать

 while(Files.hasNext()) {
   var file = Files.next();
   var doc = DocumentApp.openById(file.getId()); 
   var body = doc.getBody();
   body.replaceText("Date: \d{2}\.\d{2}\.\d{4}", "31.10.2020")
}  
 

Смысл здесь в том, чтобы использовать двойные обратные косые черты в шаблоне и избегать символов с точками, поскольку в противном случае a . соответствует любому символу, кроме символа разрыва строки.

Комментарии:

1. Большое спасибо Виктору за вашу помощь. Теперь у меня проблема с обратным пространством ))) Между ‘Date:’ и первым ‘\’

2. Если у вас есть другая проблема, пожалуйста, отправьте новый вопрос.

Ответ №2:

функция replace_text() {

    // Get speadshhet with ID
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getSheets()[0];
   
   // Returns cell with ID (User will insert his or her folder ID in cell B3)
   var range = sheet.getRange(3, 2);
   var values = range.getDisplayValue(); 
   
   // Get folder by ID - insert your folder ID
   var SourceFolder = DriveApp.getFolderById(values); 
   
   // Iterate throw all files in folder
   var Files = SourceFolder.getFiles();
   while(Files.hasNext()) {
       var file = Files.next();
     
   //  Get all documents ID  
       var doc = DocumentApp.openById(file.getId());
       
   //  Get text body to replace  
       var body = doc.getBody();

   //  Insert header in document   alignment  
       var header = body.insertParagraph(0, 'TEXT');
       header.setAlignment(DocumentApp.HorizontalAlignment.RIGHT)
       
   // Text style    
       var style = {};
       //style[DocumentApp.Attribute.HORIZONTAL_ALIGNMENT] = DocumentApp.HorizontalAlignment.RIGHT;
       style[DocumentApp.Attribute.FONT_FAMILY] = 'Arial';
       style[DocumentApp.Attribute.FONT_SIZE] = 9;
       style[DocumentApp.Attribute.FOREGROUND_COLOR] = '#000000';
       body.setAttributes(style)
       Logger.log(body)
       
    // Replacing text   
       body.replaceText("Text", " ");
       body.replaceText("Date:\s*\d{2}\.\d{2}\.\d{4}", "31.10.2020")
       
       var paragraphs = body.getParagraphs();
       for (var i = 7; i < paragraphs.length; i  ) { 
          var paragraph = paragraphs[i];
          paragraph.setAlignment(DocumentApp.Horizontal`enter code here`Alignment.LEFT)
    }
  }
}
 

Комментарии:

1. Этот код я получил в конце моего проекта. Может быть, это будет полезно для кого-то