Скрипт Google Apps: как Скопировать текст и сохранить форматирование?
Рассмотрим документ, представленный следующими 3 строками.
..некоторый текст..
6 7 8 9 10 11
..некоторый текст..
Представьте, что все числа имеют соответствующие размеры шрифта(т. е. 10-это размер шрифта 10). Теперь я хочу вставить встроенное изображение в пространство между 8 и 9 и удалить это пространство, но не уничтожить форматирование(размеры в этом примере) незатронутого текста. Результатом будет
..некоторый текст..
6 7 89 10 11
..некоторый текст..
Однако, когда я пытаюсь
function placeImage() {
var s = DocumentApp.getActiveDocument().getBody();
//Find in Document
var found = s.findText("8");
if(found==null)
return 0;
var foundLocation = found.getStartOffset(); //position of image insertion
//Get all the needed variables
var textAsElement = found.getElement();
var text = textAsElement.getText();
var paragraph = textAsElement.getParent();
var childIndex = paragraph.getChildIndex(textAsElement); //gets index of found text in paragraph
//Problem part - when removing the space, destroys all formatting
var textRemaining = text.substring(foundLocation + 2);
textAsElement.deleteText(foundLocation, text.length-1);
if(textRemaining != "")
paragraph.insertText(childIndex+1, textRemaining);//destroys formatting for the rest of the child index
//Insert image
var imgSource = UrlFetchApp.fetch("https://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Red_information_icon_with_gradient_background.svg/48px-Red_information_icon_with_gradient_background.svg.png");
var ingBlob = imgSource.getBlob();
paragraph.getChild(childIndex+1).insertInlineImage(foundLocation, ingBlob);
}
Проблема заключается в том, что когда я удаляю пробел и создаю другой дочерний элемент в абзаце, чтобы вставить изображение, подстрока также удаляет оставшееся форматирование текста. Я пытался заглянуть в copy (), но я не уверен, как это будет работать эффективно.
Я исследовал много других мест, оба ответа здесь не сохраняют форматирование и положение.insertInlineImage (), кажется, сломан, как и просил здесь .
1 ответ:
В основном это зависит от содержания вашего документа, как он настроен с абзацами. Попробовал с простым содержанием в документ и вставить изображение.
Он хорошо вставляет изображение,а также не изменяет форматирование остальной части текста.
Проверьте код ниже:
function placeImage() { var s = DocumentApp.getActiveDocument().getBody(); var number = '8' //Find in Document var found = s.findText(number); if(found==null) return 0; var foundLocation = found.getStartOffset(); //position of image insertion //Get all the needed variables var textAsElement = found.getElement(); var text = textAsElement.asText().copy();// getText(); textAsElement.editAsText().deleteText(foundLocation + number.length ,textAsElement.asText().getText().length -1) text.asText().editAsText().deleteText(0, foundLocation + 1 ); //Insert image var imgSource = UrlFetchApp.fetch('https://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Red_information_icon_with_gradient_background.svg/48px-Red_information_icon_with_gradient_background.svg.png'); var ingBlob = imgSource.getBlob(); var children =DocumentApp.getActiveDocument().getBody().getChild(0).asParagraph().appendInlineImage(ingBlob); DocumentApp.getActiveDocument().getBody().getChild(0).asParagraph().appendText(text); var child = DocumentApp.getActiveDocument().getBody().getNumChildren(); }
Содержание документа проверяется следующим образом:
6 7 8 9 10 11
(размер текста аналогичен тому, что вы упомянули. '8' - это размер 8 и так далее)
Вы должны проверить, используя метод проб и ошибок. согласно содержанию вашего документа.
Надеюсь, это поможет!