Interface: SelectionApi
API для работы с выделением в документе.
Предоставляет методы для получения выделенного контента, изменения выделения и работы с его состоянием.
Remarks
Текущие возможности:
- Получение выделенного текста в разных форматах
Типичные сценарии использования:
- Получение выделенного текста для обработки
- Экспорт выделенного контента
- Анализ выделенного фрагмента (подсчёт слов, символов)
- Применение операций (копирование, удаление) к выделению
- Вставка контента вместо выделения
Example
Получение выделенного текста
// Пользователь выделяет текст в документе
const selectedText = await editorApi.document.selection.getSelectionAsText();
console.log('Выделено:', selectedText);
Получение выделения в HTML формате
const selectedHtml = await editorApi.document.selection.getSelectionAsText('html');
// Результат содержит HTML разметку с форматированием
console.log('HTML:', selectedHtml);
Проверка наличия выделения
const selectedText = await editorApi.document.selection.getSelectionAsText();
if (selectedText && selectedText.length > 0) {
console.log('Выделение существует');
console.log('Количество символов:', selectedText.length);
console.log('Количество слов:', selectedText.split(/\s+/).length);
} else {
console.log('Нет активного выделения');
}
Обработка выделенного текста в надстройке
export default {
onInit: (editorApi) => {
// Добавить кнопку обработки выделения
editorApi.ui.ribbon.registerButton({
id: 'processSelection',
title: 'Обработать выделение',
onClick: editorApi.createCallback(async () => {
const text = await editorApi.document.selection.getSelectionAsText();
if (text) {
// Преобразовать текст (например, в ВЕРХНИЙ РЕГИСТР)
const processed = text.toUpperCase();
// Заменить выделение обработанным текстом
await editorApi.document.insertContent(processed);
editorApi.ui.toasts.showToast({ id, content: 'Выделение обработано' });
} else {
editorApi.ui.toasts.showToast({ id, content: 'Пожалуйста, выделите текст' });
}
})
});
}
}
See
- DocumentApi.clipboard — для копирования/вырезания выделения
- DocumentApi.insertContent — для замены выделения контентом
- ContentType — поддерживаемые форматы контента
Methods
getSelectionAsText()
getSelectionAsText(
contentType?):Promise<undefined|string>
Получает текущее выделенное содержимое в виде строки в указанном формате.
Parameters
contentType?
Формат возвращаемых данных (опционально)
Returns
Promise<undefined | string>
Promise с выделенным контентом в требуемом формате или undefined, если выделения нет
Remarks
Поддерживаемые форматы:
| Формат | Описание | Примечание |
|---|---|---|
plain/text (default) | Обычный текст без форматирования | Все HTML теги и стили удаляются |
html | HTML разметка с сохранением форматирования | Содержит теги для bold, italic, ссылок и т.д. |
internal | Внутренний формат MyOffice | Полная структура документа |
Поведение:
- Если выделения нет, возвращает
undefined - Если выделение пусто (длина 0), возвращает пустую строку
- Форматирование и стили сохраняются в зависимости от формата
- Изображения и объекты в выделении представляются как placeholder'ы
Производительность:
- Операция асинхронная (возвращает Promise)
- При больших выделениях может потребоваться некоторое время
- Рекомендуется использовать с проверкой на отсутствие выделения перед обработкой
Example
Получение простого текста (по умолчанию)
const selectedText = await editorApi.document.selection.getSelectionAsText();
if (selectedText) {
console.log('Выделено:', selectedText);
console.log('Длина:', selectedText.length);
}
Получение выделения в HTML формате
const selectedHtml = await editorApi.document.selection.getSelectionAsText('html');
// Результат может быть:
// <p>Это <b>жирный</b> текст</p>
console.log('HTML:', selectedHtml);
Проверка и обработка выделения
async function analyzeSelection() {
const text = await editorApi.document.selection.getSelectionAsText();
if (!text || text.length === 0) {
editorApi.ui.toasts.showToast({ id, content: 'Пожалуйста, выделите текст' });
return;
}
const stats = {
characters: text.length,
words: text.trim().split(/\s+/).length,
lines: text.split('\n').length
};
console.log('Статистика выделения:', stats);
editorApi.ui.toasts.showToast(
{ id, content: `Символов: ${stats.characters}, Слов: ${stats.words}` }
);
}
Копирование выделения с обработкой
async function copyAndTransform() {
try {
// Получить выделение
const text = await editorApi.document.selection.getSelectionAsText();
if (text) {
// Обработать (например, удалить лишние пробелы)
const cleaned = text.replace(/\s+/g, ' ').trim();
// Скопировать в буфер обмена
editorApi.document.clipboard.copy();
console.log('Скопировано:', cleaned);
}
} catch (error) {
console.error('Ошибка:', error);
}
}
Поиск и замена в выделении
async function replaceInSelection(oldText: string, newText: string) {
const selected = await editorApi.document.selection.getSelectionAsText();
if (selected && selected.includes(oldText)) {
const replaced = selected.replaceAll(oldText, newText);
await editorApi.document.insertContent(replaced);
}
}
See
- ContentType — описание всех поддерживаемых форматов
- DocumentApi.insertContent — вставка контента вместо выделения
- DocumentApi.clipboard — работа с буфером обмена