Перейти к основному содержимому
Версия: Next

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('Нет активного выделения');
}

Обработка выделенного текста в надстройке

// Добавить кнопку обработки выделения
const processSelectionButton: Button = {
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

Methods

getSelectionAsText()

getSelectionAsText(contentType?): Promise<undefined | string>

Получает текущее выделенное содержимое в виде строки в указанном формате.

Parameters

contentType?

ContentType

Формат возвращаемых данных (опционально)

Returns

Promise<undefined | string>

Promise с выделенным контентом в требуемом формате или undefined, если выделения нет

Remarks

Поддерживаемые форматы:

ФорматОписаниеПримечание
plain/text (default)Обычный текст без форматированияВсе HTML теги и стили удаляются
htmlHTML разметка с сохранением форматированияСодержит теги для 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