- Вы хотите преобразовать найденные тексты в маленькие заглавные буквы.
Я мог понять, как выше. Если мое понимание верно, как насчет этого примера сценария?
К сожалению, на текущем этапе в Document Service пока нет способов изменить часть текста на маленькие заглавные буквы. Я думаю, что это может быть достигнуто с помощью Document Service в будущем обновлении. Но в качестве текущего обходного пути я подумал, что недавно выпущенный Google Docs API может быть использован для достижения этой цели. Поэтому я бросил вызов этому.
Чтобы использовать следующий пример сценария, прежде чем запускать сценарий, включите API Google Docs на консоли API следующим образом.
Включить API Google Docs на консоли API:
- в редакторе скриптов
- Ресурсы -> Проект облачной платформы
- Просмотр консоли API
- На начальном этапе нажмите «Исследовать и включить API».
- В левой части нажмите Библиотека.
- В поле «Поиск API и сервисов» введите «Документы». И нажмите «API Документов Google».
- Нажмите кнопку включения.
- Если API уже включен, не выключайте его.
Расход:
Ход выполнения примера сценария выглядит следующим образом.
- Поиск текстов в Документе Google с помощью метода findText Сервиса документов.
- Получить все содержимое из Документа Google, используя метод get API Google Docs.
- Каждый контент соответствует каждому абзацу документа.
- Создание диапазонов всех найденных текстов с использованием извлеченного содержимого и объектов, извлеченных методом findText.
- Изменить стиль текста найденных текстов с помощью метода batchUpdate API Документов Google.
Пример сценария:
Пример сценария для сценария с контейнером в Google Document. Скопируйте и вставьте следующий скрипт в редактор скриптов и запустите функцию sample()
.
function applySmallCapital(textToFind) {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var id = doc.getId();
var baseUrl = "https://docs.googleapis.com/v1/documents/";
var headers = {"Authorization": "Bearer " + ScriptApp.getOAuthToken()};
var params = {headers: headers};
// Retrieve all contents from Google Document.
var res = UrlFetchApp.fetch(baseUrl + id + "?fields=*", params);
var obj = JSON.parse(res.getContentText());
// In order to use at Google Docs API, create ranges of found texts.
var foundElement = body.findText(textToFind);
var ranges = [];
while (foundElement != null) {
var p = foundElement.getElement();
if (p.getType() == DocumentApp.ElementType.TEXT) p = p.getParent();
if (p.getType() == DocumentApp.ElementType.PARAGRAPH || p.getType() == DocumentApp.ElementType.LIST_ITEM) {
var content = obj.body.content[body.getChildIndex(p) + 1];
ranges.push({
startIndex: content.startIndex + foundElement.getStartOffset(),
endIndex: content.startIndex + foundElement.getEndOffsetInclusive(),
});
}
foundElement = body.findText(textToFind, foundElement);
}
// Modify textStyle of found texts.
if (ranges.length > 0) {
var resource = {requests: ranges.map(function(e) {return {
updateTextStyle: {
textStyle: {smallCaps: true},
range: e,
fields: "smallCaps"}
}
})};
params.method = "post";
params.contentType = "application/json";
params.payload = JSON.stringify(resource);
UrlFetchApp.fetch(baseUrl + id + ":batchUpdate", params);
}
}
function sample() {
applySmallCapital("this should be small caps");
}
Результат:
От:
Кому:
- Для тестирования этого скрипта были использованы ваши образцы текста в вашем общем документе. Вы можете видеть, что текст «это должны быть маленькие заглавные буквы» изменен на маленькие заглавные буквы.
Ссылки:
Добавлено:
Когда используется API Google Docs для Advanced Google Services, приведенный выше сценарий выглядит следующим образом. Когда вы используете это, включите Google Docs API в Advanced Google Services. В этом скрипте стоимость стала немного ниже, чем выше, за счет сокращения одного цикла.
function applySmallCapital(textToFind) {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var id = doc.getId();
// Retrieve all contents from Google Document.
var obj = Docs.Documents.get(id, {fields: "*"})
// In order to use at Google Docs API, create ranges of found texts.
var foundElement = body.findText(textToFind);
var requests = [];
while (foundElement != null) {
var p = foundElement.getElement();
if (p.getType() == DocumentApp.ElementType.TEXT) p = p.getParent();
if (p.getType() == DocumentApp.ElementType.PARAGRAPH || p.getType() == DocumentApp.ElementType.LIST_ITEM) {
var content = obj.body.content[body.getChildIndex(p) + 1];
requests.push({
updateTextStyle: {
textStyle: {smallCaps: true},
range: {
startIndex: content.startIndex + foundElement.getStartOffset(),
endIndex: content.startIndex + foundElement.getEndOffsetInclusive(),
},
fields: "smallCaps"}
});
}
foundElement = body.findText(textToFind, foundElement);
}
// Modify textStyle of found texts.
if (requests.length > 0) {
var resource = {requests: requests};
Docs.Documents.batchUpdate(resource, id);
}
}
function sample() {
applySmallCapital("this should be small caps");
}
Ссылка: