- Вы хотите удалить искомый текст в Документе Google.
- Вы хотите удалить "HORIZONTAL_RULE" под текстом.
- Вы хотите запустить выше, когда пользователь выбирает «НЕТ» из
ui.alert
.
- Вы хотите добиться этого с помощью Google Apps Script.
Если мое понимание верно, как насчет этого примера сценария? Хотя я не уверен в вашем настоящем Документе, из вашего объяснения я представил его и подготовил образец сценария. Пожалуйста, подумайте об этом как один из нескольких ответов. Процесс этого примера сценария выглядит следующим образом.
Поток:
- Поиск текста поиска осуществляется с помощью
findText()
.
- Поместить элемент искомого текста в массив.
- Этот массив используется для удаления элемента.
- Поиск "HORIZONTAL_RULE" ниже искомого текста.
- В этом случае, когда «HORIZONTAL_RULE» не соседствует с искомым текстом, поиск «HORIZONTAL_RULE» осуществляется с помощью
offsetValue
. В этом примере выполняется поиск до 3 абзацев.
- Когда "HORIZONTAL_RULE" найден, элемент помещается в массив.
- Удалить элементы в массиве.
- Из вашего скрипта искомый текст очищается. В этом случае абзац не удаляется.
- Из вашего вопроса о "HORIZONTAL_RULE" абзац удален.
Когда вышеуказанный поток отражается в сценарии, он становится следующим:
Пример сценария:
Когда вы запускаете скрипт, тексты, найденные с помощью regExpFirstBriefing
, очищаются, а "HORIZONTAL_RULE" под текстом также удаляется.
function myFunction() {
var document = DocumentApp.getActiveDocument(); // Added
var ui = DocumentApp.getUi(); // Added
var regExpFirstBriefing = "[A-Z \(\)]{42}\\v+[A-Za-z\.\", ]*[\\v+]{1}";
var responseFirstBriefing = ui.alert('Question here...' , ui.ButtonSet.YES_NO);
if (responseFirstBriefing == ui.Button.YES) {
document.replaceText(regExpFirstBriefing, '');
// I added below script.
} else if (responseFirstBriefing == ui.Button.NO) {
var offsetValue = 3; // When "HORIZONTAL_RULE" doesn't adjacent the searched text, "HORIZONTAL_RULE" is searched by "offsetValue". In this sample, it is searched up to 3 paragraph ahead.
var body = document.getBody();
var r = body.findText(regExpFirstBriefing);
var remove = [];
while (r) {
remove.push(r.getElement().asText())
var parentParagraph = body.getChildIndex(r.getElement().getParent());
var totalChildren = body.getNumChildren();
for (var offset = 1; offset <= offsetValue; offset++) {
if (parentParagraph + offset <= totalChildren) {
var nextParagraph = body.getChild(parentParagraph + offset);
if (nextParagraph.getType() === DocumentApp.ElementType.PARAGRAPH) {
var c = nextParagraph.asParagraph().getNumChildren();
for (var i = 0; i < c; i++) {
var childOfNextParagraph = nextParagraph.asParagraph().getChild(i);
if (childOfNextParagraph.getType() === DocumentApp.ElementType.HORIZONTAL_RULE) {
remove.push(childOfNextParagraph.asHorizontalRule());
break;
}
}
if (remove[remove.length - 1].getType === DocumentApp.ElementType.HORIZONTAL_RULE) {
break;
}
}
}
}
r = body.findText(regExpFirstBriefing, r);
}
for (var i = remove.length - 1; i >=0; i--) {
/////
// If you want to delete the paragraph of searched text, please delete this if statement.
if (remove[i].getType() === DocumentApp.ElementType.TEXT) {
remove[i].removeFromParent();
continue;
}
/////
remove[i].getParent().asParagraph().removeFromParent();
}
}
}
Примечание:
- Этот сценарий предполагает, что регулярное выражение
[A-Z \(\)]{42}\\v+[A-Za-z\.\", ]*[\\v+]{1}
работает для вашего документа.
Если вы хотите удалить абзац искомого текста, удалите его, если из приведенного выше сценария указано следующее.
if (remove[i].getType() === DocumentApp.ElementType.TEXT) {
remove[i].removeFromParent();
continue;
}
Ссылки:
Если я неправильно понял ваш вопрос, и это был не тот результат, которого вы хотите, я прошу прощения В то время, чтобы правильно понять вашу ситуацию, можете ли вы предоставить образец документа, который вы хотите использовать? Конечно, пожалуйста, удалите вашу личную информацию. Я хотел бы подтвердить проблему от этого.