#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. Этот код я получил в конце моего проекта. Может быть, это будет полезно для кого-то