
- •Полезная информация по Макросам для OpenOffice - русский перевод
- •Оглавление
- •Введение
- •Сокращения и обозначения
- •Предисловие переводчика BuhCia
- •Доступные ссылки
- •Включенный материал
- •Ссылки на сайты
- •Переводы настоящего документа
- •Начало: концепция
- •Мой первый макрос: “Hello World”
- •Группировка текста программ
- •Отладка
- •Переменные, константы, строки и числовые типы
- •Обращение к объектам и создание объектов (Objects) в OpenOffice
- •Что же такое uno?
- •Структуры
- •Интерфейсы
- •Сервисы (Services)
- •Интерфейсы и сервисы (services)
- •Каков тип данного объекта?
- •Какие методы, свойства, интерфейсы и сервисы поддерживаются?
- •Языки, отличные от Basic
- •Метод CreateUnoService
- •Глобальная переменная ThisComponent
- •Глобальная переменная StarDesktop
- •Методы и свойства доступа к объектам в зависимости от языка
- •Примеры
- •Отладка и проверка макросов
- •Определить тип документа
- •Вывод всех интерфейсов, методов и свойств объекта
- •Средство X-Ray досюда
- •Начало (Dispatch): использование универсального сетевого объекта Universal Network Objects (uno)
- •Изменения механизма отправки (Dispatcher) в версии 1.1 oOo
- •Использование механизма отправки (dispatcher) требует пользовательского интерфейса.
- •Изменение меню - пример механизма отправки (dispatcher)
- •Прерывание команд меню с использованием Basic
- •Разные примеры
- •Вывод текста в строку состояния
- •Вывод всех стилей текущего документа
- •Пройтись по всем открытым документам
- •Вывести фонты и другую информацию об экране
- •Вывод поддерживаемых фонтов
- •Установка фонта по умолчанию с использованием ConfigurationProvider
- •Печать текущего документа
- •Печать текущей страницы
- •Другие параметны печати
- •Ландшафтная печать
- •Информация о конфигурации
- •Версия oOo
- •Язык (локаль) oOo
- •Открыть и закрыть документы (и рабочий стол)
- •Закрыть OpenOffice и/или документы
- •Что, если документ (файл) изменен?
- •Загрузка документа по адресу url
- •Полный пример
- •Сохранить документ с паролем
- •Создание нового документа на основе шаблона
- •Как разрешить макросы с помощью LoadComponentFromUrl
- •Обработка ошибок при загрузке документа
- •Пример использования Mail Merge для объединения всех документов в папке
- •Загрузка/Вставка графики в документ
- •Преобразование графического объекта как ссылки во встроенный графический объект.
- •Danny Brewer вставляет встроенный графический объект
- •Вставить графический объект, использую диспетчер (dispatch)
- •Встроить графический объект прямым методом
- •Установка полей
- •Установка размера бумаги
- •Вызов внешней программы (Internet Explorer) с помощью ole
- •Использовать команду Shell для файлов, содержащих пробелы
- •Чтение и Запись числа в файл
- •Создать числовой стиль формата
- •Посмотреть существующие числовые стили формата
- •Возвращает массив чисел Фибоначчи
- •Вставка теккста в качестве закладки (Bookmark)
- •Сохранение и экспорт документа
- •Поля пользователя
- •Информация о документе
- •Текстовые поля
- •Мастер-поля (Master)
- •Удаление текстовых полей
- •Вставка адреса url в ячейку oOo Calc
- •Добавление в текстовое поле установки выражения (SetExpression TextField)
- •Типы данных, определенные пользователем
- •Проверка орфографии, переносы и толковый словарь - тезаурус
- •Изменение указателя мыши
- •Установка фона страницы (Page Background)
- •Работа с буфером (clipboard)
- •Копировать ячейки электронной таблицы с помощью буфера системы Clipboard
- •Скопировать ячейки электронной таблицы без использования буфера системы
- •Получение типа содержимого (content-type) буфера системы Clipboard
- •Сохранение строки в буфер системы clipboard
- •Просмотреть буфер системы clipboard как текст
- •Альтернатива буферу системы clipboard – перемещаемое содержимое (transferable content)
- •Установка локали (языка)
- •Установки локали для выделенного текста
- •Автотекст (Auto Text)
- •Десятичные футы и дроби
- •Преобразовать число в слова
- •Отправка электронного письма
- •Библиотеки макросов
- •Словарь
- •Контейнер библиотеки модулей
- •Библиотеки
- •Где хранятся библиотеки?
- •Контейнер библиотек
- •Предупреждение о неопубликованных сервисах
- •Что означает загрузить (load) библиотеку?
- •Распространение и развертывание библиотеки
- •Установка размеров точечного рисунка (Bitmap)
- •Вставить, изменить размер, указать позицию изображения в документе oOo Calc.
- •Экспортировать изображение, задав его размер
- •Нарисовать линию в документе oOo Calc
- •Извлечение файла Zip
- •Другой пример Zip-файла
- •Упаковать в формат Zip целые папки
- •Выполнить макрос по строке с его именем
- •Выполнить макрос из командной строки
- •Выполнить указанный макрос в документе
- •Использование "приложения по умолчанию" для открытия файла
- •Распечатка перечня фонтов
- •Получить для документа: адрес url, имя файла и папку
- •Получить и установить текущую папку (directory)
- •Запись файла
- •Логический разбор синтаксиса (Parsing) xml
- •Работа с датами Dates
- •Встроен ли OpenOffice в Веб-браузер?
- •Активизировать (поставить на первый план) новый документ
- •Каков тип документа (основываясь на адресе url)
- •Соединиться с удаленным сервером oOo с использованием Basic
- •Панели инструментов
- •Создание панели инструментов для типа компонентов
- •Моя первая панель инструментов (toolbar)
- •Макросы электронных таблиц Calc
- •Является ли этот документ электронной таблицей?
- •Вывести для ячейки электронной таблицы значение (value), строковое значение (string) и формулу (formula)
- •Установить для ячейки электронной таблицы значение (value), формат (format), текстовое значение (string) и формулу (formula)
- •Ссылка на ячейку в другом документе
- •Очистка ячейки
- •Выделенный (Selected) текст - что это?
- •Простой пример обработки выделенных ячеек
- •Получить активную ячейку игнорировать остальное
- •Выделить (Select) ячейку
- •Удобный для чтения (Human readable) адрес ячейки
- •Вставить форматированную дату в ячейку
- •Более короткий путь для этого
- •Вывести выделенный интервал ячеек (selected range) в окно сообщения
- •Заполнить выделенный интервал ячеек заданным текстом
- •Некоторые данные и статистика о выделенном интервале ячеек
- •(Именованный) Интервал ячеек базы данных
- •Определить выбранные ячейки в качестве (именованного) интервала ячеек базы данных
- •Удалить (именованный) интервал ячеек базы данных
- •Границы таблицы
- •Интервал ячеек для сортировки
- •Вывести все данные столбца
- •Использование методов объединения (Outline, Grouping)
- •Защита данных
- •Установка текстов верхнего и нижнего заголовков
- •Копирование ячеек электронной таблицы
- •Копирование листа целиком в новый документ
- •Выделить именованный интервал ячеек (named range)
- •Выделить столбец целиком
- •Выделить строку целиком
- •Преобразовать данные из столбца определенного вида в строки
- •Включить/Выключить автоматический пересчет
- •Какие ячейки листа используются?
- •Поиск в электронной таблице Calc
- •Напечатать интервал ячеек электронной таблицы
- •Объединена ли эта ячейка (с другими)?
- •Написать свою функцию электронной таблицы Calc
- •Функции Calc, определенные пользователем
- •Оценка и проверка аргументов
- •Каков тип возвращаемого значения
- •Не изменяйте значений других ячеек электронной таблицы
- •Макросы текстового документа (Writer)
- •Что такое выделенный текст?
- •Находится ли курсор в текстовой таблице?
- •Можно ли проверить текущее выделение для текстовой таблицы (TextTable) или ячейки (Cell)?
- •Что такое текстовые курсоры (Text Cursors)?
- •Нельзя передвинуть курсор к "якорю" (anchor) TextTable.
- •Вставка чего-либо перед (или после) текстовой таблицы.
- •Можно передвинуть курсор на закладку (Bookmark anchor).
- •Вставка текста в место закладки
- •Работа с текстом (Andrew's Selected Text Framework)
- •If ничего не выделено then
- •Выделен ли текст?
- •Как получить выделенную область (Selection)
- •Выделенный текст: Какой конец - начало, какой - конец
- •Работа макроса с выделенным текстом (Selected Text Framework Macro)
- •Непригодный фрейм (Rejected Framework)
- •Приемлемый способ (Framework)
- •Основной рабочий макрос
- •Подсчет числа предложений
- •Удаление пустых промежутков текста и пустых строк, более подробный пример
- •Определение пробела (White Space)
- •Последовательности символов для удаления
- •Стандартный макрос перебора выделенного текста
- •"Рабочий" макрос
- •Удаление пустых параграфов, другой пример
- •Выделенный текст, вопросы скорости выполнения, подсчет слов
- •Поиск в выделенном тексте для подсчета слов
- •Использование строк (Strings) для подсчета числа слов
- •Использование курсора (Character Cursor) для подсчета числа слов
- •Использование курсора слов (Word Cursor) для подсчета числа слов
- •Итоговые размышления о подсчете числа слов и скорости выполнения
- •Подсчет слов: нужно использовать вот этот макрос!
- •Замена выделенного пробела с использованием строк (Strings)
- •Сравнение макросов, основанных на курсорах, и макросов, основанных на извлечении строк (String)
- •Установка атрибутов текста
- •Вставить текст
- •Вставить новый параграф (paragraph)
- •Вставить форматированное поле даты в документ oOo Writer
- •Вставка примечания (аннотация)
- •Вставка новой страницы
- •Удаление разрывов страниц
- •Установить стиль страницы в документе
- •Включение и выключение верхних и нижних заголовков
- •Вставить ole-объект
- •Установка стиля параграфа (Paragraph)
- •Создать свой собственный стиль
- •Поиск и замена
- •Замена текста
- •Поиск в выделенном тексте
- •Сложный поиск и замена
- •Поиск и замена с атрибутами и регулярными выражениями (Regular Expressions)
- •Искать только первую текстовую таблицу
- •Изменение строчных букв на прописные и наоборот (Case) в словах
- •Перебор параграфов (поведение текстового курсора)
- •Форматирование параграфов с макросами (пример)
- •Находится ли курсор в последнем параграфе
- •Что означает перебрать содержимое текста?
- •Перебор текста и поиск текстового содержимого (content)
- •Но я только хочу найти графические объекты
- •Найти текстовое поле, содержащееся в текущем параграфе?
- •Где находится курсор дисплея (Display Cursor)?
- •Какой курсор нужно использовать для удаления строки или параграфа
- •Удалить текущую страницу
- •Вставка индекса или оглавления (table of contents)
- •Вставка адреса url в документ oOo Writer
- •Сортировка текста
- •Нумерация структур (Outline)
- •Текстовые секции (sections)
- •Встивить текстовую секцию, установка столбцов и значений ширины
- •Сноски на странице (Footnotes) и сноски в конце текста (Endnotes)
- •Текстовые таблицы
- •Поиск текстовых таблиц
- •Где находится текстовая таблица
- •Перебор (Enumerating) всех текстовых таблиц.
- •Перебор ячеек в текстовой таблице.
- •Простые текстовые таблицы
- •Форматирование простой текстовой таблицы
- •Что такое сложная текстовая таблица
- •Перебор ячеек в любой текстовой таблице
- •Извлечение данных из простой текстовой таблицы
- •Курсоры таблицы и интервалы ячеек
- •Интервалы ячеек (Cell ranges)
- •Использование интервала ячеек для очистки ячеек
- •Данные диаграммы (Chart data)
- •Ширина столбцов
- •Установка оптимальной ширины столбца
- •Насколько широка текстовая таблица?
- •Курсор в текстовой таблице
- •Установить курсор после текстовой таблицы
- •Создание текстовой таблицы
- •Форматирование макроса
- •Утилиты для строк и массивов
- •Специальные символы и числа в строках
- •Массивы строк
- •Утилиты для поиска разделов/секций с кодами макросов
- •Основной модуль макроса
- •Первичные точки входа
- •Основной рабочий макрос
- •Введение
- •Диалоги
- •Элементы управления
- •Текст/метка элемента управления (Control Label)
- •Управляющая кнопка (Button)
- •Поле текста (Text Box)
- •Поле списка (List Box)
- •Комбинированное поле: ввод с присоединенным списком (Combo Box)
- •Поле флажка (Check Box)
- •Кнопка "радио" (включена/выключена) (Option/Radio Button)
- •Индикатор выполнения (Progress Bar)
- •Получение элементов управления (Controls)
- •Управление размерами и местоположением элементов управления по именам
- •Какой элемент управления вызвал обработку и где он расположен?
- •Выбор файла с использованием диалога (File Dialog)
- •Центрировать диалог на экране
- •Установить перехватчик события (event listener) для элемента управления
- •Управление диалогом я не создал.
- •Вставка формулы
- •Раскрытие доступного содержимого (автор Andrew)
- •Выполнение манипуляций с диалогом Опции (Options)
- •Листинг поддерживаемых принтеров
- •Поиск открытого окна
- •Исследование доступного содержимого (автор ms777)
- •База данных (Database)
- •Пример по инвестициям (Investment)
- •Использование только простых процентов
- •Сложные проценты
- •Обработчики (Handlers) и перехватчики (Listeners)
- •XKeyHandler пример
- •Перехватчик (Listener), описанный автором Paolo Mantovani
- •Функция CreateUnoListener (создать перехватчик)
- •Хорошо, но что этот макрос делает?
- •Как я знаю, какие методы создавать?
- •Пример 1: com.Sun.Star.View.XSelectionChangeListener
- •Пример 2: com.Sun.Star.View.XPrintJobListener
- •Пример 3: com.Sun.Star.Awt.XKeyHandler
- •Небольшие дополнения от автора Andrew
- •Замечания о клавишах модификации (Ctrl и Alt)
- •Пример 4: com.Sun.Star.Awt.XMouseClickHandler
- •Пример 5: Ручная привязка к событиям
- •Что произошло с моим перехватчиком ActiveSheet?
- •Язык (Language)
- •Страшные глобальные переменные (Global) и статические (Statics)
- •Булевские переменные
- •Целые переменные (Integer)
- •Использовать тип переменной Object или Variant
- •Константы (Constants)
- •Массивы (Arrays)
- •Опция начала индексов массивов Option Base
- •Изменение числа элементов массива ReDim
- •Изучение объектов
- •Операторы сравнения
- •Функции (Functions) и процедуры (SubProcedures)
- •Необязательные параметры
- •Передача параметров по ссылке (By Reference) или по значению (Value)
- •Рекурсия (Recursion)
- •Управление последовательностью выполнения программы (Flow Control)
- •Операторы If Then Else
- •Оператор Choose
- •Оператор Select Case
- •Выражения в операторах Case
- •Простой, но неправильный пример
- •Неверный пример с интервалом
- •Неверный пример с интервалом
- •Интервалы, правильный способ
- •Цикл While...Wend
- •Переход к процедуре GoSub
- •Оператор GoTo
- •Конструкция On ... GoTo
- •Операторы Exit
- •Обработка ошибок
- •Определяем, как обрабатывать ошибку
- •Написать обработчик ошибок
- •Пример обработки ошибок
- •Операторы и их старшинство Operators и Precedence
- •Действия со строками
- •Удалить символы из строки
- •Удалить текст из строки
- •Печать кодов ascii символов строки
- •Удалить все экземпляры заданной подстроки из исходной строки
- •Работа с числами
- •Работа с датами
- •Работа с файлами
- •Операторы в выражениях, операторы программы, функции
- •Оператор вычитания (-)
- •Оператор умножения (*)
- •Оператор деления (/)
- •Оператор and
- •Функция Abs
- •Функция создания массива Array
- •Функция Asc
- •Функция atn (арктангенс)
- •Оператор Beep
- •Функция Blue
- •Ключевое слово ByVal
- •Ключевое слово Call
- •Функция cBool
- •Функция cByte
- •Функция cDate
- •Функция cDateFromIso
- •Функция cDateToIso
- •Функция cDbl
- •Оператор ChDir - нежелателен
- •Оператор ChDrive - нежелателен
- •Функция Choose
- •Функция Chr
- •Функция cInt
- •Функция cLng
- •Оператор Close
- •Оператор константы Const
- •Функция ConvertFromUrl
- •Функция ConvertToUrl
- •Функция косинуса Cos
- •Функция создания диалога CreateUnoDialog
- •Функция CreateUnoService
- •VMessage.Setsubject("Это моя тестовая тема письма")
- •Функция CreateUnoStruct
- •Функция cSng
- •Функция cStr
- •Функций CurDir
- •Функций Date
- •Функция DateSerial
- •Функция DateValue
- •Функция Day
- •Оператор объявления Declare
- •Оператор DefBool
- •Оператор DefDate
- •Оператор DefDbl
- •Оператор DefInt
- •Оператор DefObj
- •Оператор DefVar
- •Оператор Dim
- •Функция DimArray
- •Функция Dir
- •Операторы Do...Loop
- •Оператор End
- •Функция Environ
- •Функция eof
- •Функция EqualUnoObjects
- •Оператор eqv
- •Функция Erl
- •Функция Err
- •Оператор Error не работает так, как описано
- •Функция Error
- •Оператор Exit
- •Функция Exp
- •Функция FileAttr
- •Оператор FileCopy
- •Функция FileDateTime
- •Функция FileExists
- •Функция FileLen
- •Функция FindObject
- •Функция FindPropertyObject
- •Фунукция Fix
- •Конструкция For...Next
- •Функция Format
- •Функция FreeFile
- •Функция FreeLibrary
- •Оператор Function
- •Оператор Get
- •Функция GetAttr
- •Функция GetProcessServiceManager
- •Функция GetSolarVersion
- •Функция GetSystemTicks
- •Ключевое слово GlobalScope
- •Оператор GoSub
- •Оператор GoTo
- •Функция Green
- •Функция HasUnoInterfaces
- •Функция Hex
- •Функция Hour
- •Оператор If
- •Функция iif
- •Оператор Imp
- •Оператор Input
- •Функция InputBox
- •Функция InStr
- •Функция Int
- •Функция IsArray
- •Функция IsDate
- •Функция IsEmpty
- •Функция IsMissing
- •Функция IsNull
- •Функция IsNumeric
- •Функция IsObject
- •Функция IsUnoStruct
- •Функция Kill
- •Функция lBound
- •Функция lCase
- •Функция Loc
- •Функция Lof
- •Функция Log
- •Оператор Loop
- •Оператор lSet
- •Функция lTrim
- •Ключевое слово Private
- •Ключевое слово Public
- •Функция Red
- •Оператор rSet
- •Функция Shell
- •Функция uBound
- •Функция uCase
- •Программисты на Visual Basic
- •Активная рабочая книге ActiveWorkbook
- •Активный лист и активная ячейка (ActiveSheet и ActiveCell)
- •Дополнения переводчика BuhCia
- •Пример макроса, исправляющего оглавление.
- •Алфавитный указатель (Index)
Но я только хочу найти графические объекты
Я проверил этот макрос на документе OOo Writer и он пересмотрел все графические объекты. Это явно наиболее быстрый способ найти графические объекты.
Листинг 7.16.5.1:Find all items on a draw page Найти все элементы страницы чертежа, графики (draw page).
Dim i As Integer
Dim oGraph
For i=0 To ThisComponent.Drawpage.getCount()-1
oGraph = ThisComponent.Drawpage.getByIndex(i)
Next i
Найти текстовое поле, содержащееся в текущем параграфе?
CPH (Mr. Hennessy) хотел текстовое поле в начале текстового параграфа
Можно перебирать текстовые поля, проверяя, привязаны ли они к текущему параграфу.
Текстовый курсор может перебирать содержимое, но текстовые поля не включаются в перебор.
Можно передвигать курсор на один симовол за один раз через весь текущий параграф в поисках полей (см. 7.16.6.1). Похожий способ использован для определения, содержится ли текущий курсор в текстовой таблице или ячейке (см. 7.1.1.1 и 7.1.2.1).
Листинг 7.16.6.1:Использовать курсор для поиска текстового поля.
oTCurs.gotoStartOfParagraph(False)
Do While oTCurs.goRight(1, False) и NOT oTCurs.isEndOfParagraph()
If NOT IsEmpty(oTCurs.TextField) Then
Print "Найдено поле путем перемещения курсора по тексту."
End If
Loop
Перебор текстового содержимого из текстового курсора будет перебирать графические объекты, но это НЕ перебирает текстовые поля.
Листинг 7.16.6.2:Перебрать текстовое содержимое.
sTContentService = "com.sun.star.text.TextContent"
oEnum = oTCurs.createContentEnumeration(sTContentService)
Do While oEnum.hasMoreElements()
oSect = oEnum.nextElement()
Print "Enumerating TextContent: " & oSect.ImplementationName
Loop
Текущий параграф может быть перебран из текстового курсора.
Листинг 7.16.6.3:Начать перебор из текстового курсора.
oEnum = oTCurs.createEnumeration()
Do While oEnum.hasMoreElements()
v = oEnum.nextElement()
oSecEnum = v.createEnumeration()
Do While oSecEnum.hasMoreElements()
oSubSection = oSecEnum.nextElement()
If oSubSection.TextPortionType = "TextField" Then
REM Заметьте, что доступ осуществляется к Textfield ,
REM Можно также получить доступ к
REM TextFrame, TextSection, или TextTable.
'Текстовое поле здесь
ElseIf oSubSection.TextPortionType = "Frame" Then
'Графические объекты здесь!
End If
Loop
Loop
Собирая макросы вместе в единую программу, получаем следующее:
Листинг 7.16.6.4:Найти графические объекты и текстовые поля в текущем параграфе.
Sub GetTextFieldFromParagraph
Dim oEnum 'Cursor enumerator.
Dim oSect 'Current Section.
Dim s$ 'Generic string variable.
Dim oVCurs 'Holds the view cursor.
Dim oTCurs 'Created text cursor.
Dim oText 'Text object that contains the view cursor
Dim sTContentService$
sTContentService = "com.sun.star.text.TextContent"
REM Only the view cursor knows where a line ends.
oVCurs = ThisComponent.CurrentController.getViewCursor()
REM Use the text object that contains the view cursor.
oText = oVCurs.Text
REM Require a text cursor so that you know where the paragraph ends.
REM Too bad the view cursor is not a paragraph cursor.
oTCurs = oText.createTextCursorByRange(oVCurs)
oTCurs.gotoStartOfParagraph(False)
oTCurs.gotoEndOfParagraph(True)
REM This does NOT work to enumerate text fields,
REM but it enumerates graphics.
oEnum = oTCurs.createContentEnumeration(sTContentService)
Do While oEnum.hasMoreElements()
oSect = oEnum.nextElement()
Print "Enumerating TextContent: " & oSect.ImplementationName
Loop
REM focus the cursor over the paragraph again.
oTCurs.gotoStartOfParagraph(False)
oTCurs.gotoEndOfParagraph(True)
REM и this provides the paragraph!
oEnum = oTCurs.createEnumeration()
Dim v
Do While oEnum.hasMoreElements()
v = oEnum.nextElement()
Dim oSubSection
Dim oSecEnum
oSecEnum = v.createEnumeration()
s = "Enumerating section type: " & v.ImplementationName
Do While oSecEnum.hasMoreElements()
oSubSection = oSecEnum.nextElement()
s = s & CHR$(10) & oSubSection.TextPortionType
If oSubSection.TextPortionType = "TextField" Then
REM Notice how a Textfield is accessed, you can also access a
REM TextFrame, TextSection, or a TextTable.
s = s & " <== here is a text field "
s = s & oSubSection.TextField.ImplementationName
ElseIf oSubSection.TextPortionType = "Frame" Then
s = s & " <== here is a Frame "
End If
Loop
MsgBox s, 0, "Пересчитать единственный параграф"
Loop
REM Move the cursor one character at a time looking
REM for a text field.
oTCurs.gotoStartOfParagraph(False)
Do While oTCurs.goRight(1, False) и NOT oTCurs.isEndOfParagraph()
If NOT IsEmpty(oTCurs.TextField) Then
Print "Найти поле передвижением курсора через текст."
End If
Loop
End Sub