Как в Google Docs сделать различный цвет для редакторов документа?
Можно ли в Google Docs
автоматически ставить цвет у разных юзеров?
Я мало пока знаком с Google Docs Add-on
.
Суть в том, что есть общий документ, в него вносят правки несколько человек, очень удобно, когда каждый своим цветом пишет.
Сейчас, чтобы это реализовать, приходится вручную переключать цвета каждый раз, дико неудобно.
Заранее благодарю за ответ.
Ответы (1 шт):
провел небольшое исследование и понял: скорее всего, действительно хорошего способа решить эту задачу нет, просто потому, что даже на уровне прямого взаимодействия с гугл-доксами, если поместить курсор в строку - выбранный цвет меняется на цвет этой строки. так бы можно было подумать о замене выбранного цвета при открытии документа, например, используя onOpen()
.
но могу предложить такое решение: добавить менюшку с кнопкой, нажатие на которую будет задавать цвет в позиции курсора, в зависимости от настроек, назначенных пользователю по email. оно, по крайней мере, чуть облегчит жизнь (особенно если понять, как в доксах назначать хоткеи для макросов, у меня большой опыт с google sheets api - там это делается без проблем, а вот в доксах я немного теряюсь - слишком редко с ними работаю):
// ключ - email пользователя, значение - hex цвета.
const EMAIL_COLOR_MAP = {
"[email protected]": "#FF0000",
"[email protected]": "#0000FF",
"[email protected]": "#008000",
};
const DEFAULT_COLOR = "#000000";
// создаем свое меню с кнопкой "Установить цвет текста" в панели инструментов
function onOpen() {
let ui = DocumentApp.getUi();
ui.createMenu('Настройки пользователя')
.addItem('Установить цвет текста', 'setUserTextColor')
.addToUi();
}
function setUserTextColor() {
const userEmail = Session.getActiveUser().getEmail();
let doc = DocumentApp.getActiveDocument();
// сопоставляем email со словарем, если для email не задан цвет - задаем дефолтный.
const userColor = EMAIL_COLOR_MAP[userEmail] || DEFAULT_COLOR;
let cursor = doc.getCursor();
if (cursor) {
let element = cursor.getElement().asText();
// определяем, где находится курсор
let pos = cursor.getSurroundingTextOffset();
/*
вот тут есть смысл поиграться с координатами startOffset и endOffset
меняется цвет 1 символа слева от выделенной области (поэтому pos-1),
что гарантирует, что весь следующий текст будет написан цветом
пользователя.
наверное, лучшим вариантом было бы добавить пробел, назначить ему цвет и удалить.
если pos оставить без сдвига, то по каким-то причинам цвет не изменится.
*/
let startOffset = pos > 0 ? pos - 1 : 0;
let endOffset = pos > 0 ? pos - 1 : 0;
element.setForegroundColor(startOffset, endOffset, userColor);
}
else {
// вообще было бы классно сделать еще и изменение цвета выделенной части текста
DocumentApp.getUi().alert('Пожалуйста, установите курсор в место, где вы хотите изменить цвет текста.');
}
}
возможно, есть способы сделать это без костылей, но тут нужно подробнее изучать доку google apps script.
еще можно поиграться с onEdit()
- но обычно все решения с использованием onEdit()
отлетают как минимум из-за ограничений gas
(в т.ч. квот).