
- •Полезная информация по Макросам для 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)
Данные диаграммы (Chart data)
Не беспокойтесь об этой теме... Я бы не упоминал об этом, если бы не хотел что-то сделать с диаграммами.??
ARRAY getColumnDescriptions ( void )
ARRAY getRowDescriptions ( void )
VOID setColumnDescriptions ( ARRAY )
VOID setRowDescriptions ( ARRAY )
Ширина столбцов
Разделитель столбца (column separator) указывает, где заканчивается столбец в процентах от ширины таблицы. Позиция конца столбца 5000 означает ширину 50% от ширины таблицы. Макрос в 8.7.1 устанавливает, что первый столбец заканчивается на 50% ширины текущей таблицы, а второй столбец на 70% от общей ширины таблицы.
Таблица поддерживает это свойство, только если все строки имеют одинаковую структуру. Другими словами, нельзя установить ширину столбца для всей таблицы, если таблица сложная. Замечу еще, что если данный разделитель столбца имеет значение флага IsVisible ("видимый") равный false, то он невидим. Невидимые разделители нельзя переместить, и они не могут быть перекрыты видимыми разделителями.
Листинг 8.7.1:Установить ширину столбца для первых двух столбцов.
Sub SetTwoColsWidths
Dim oTblColSeps 'Массив разделителей столбцов таблицы.
Dim oTable 'Первая текстовая таблица в документе.
'Печатаем
oTable = ThisComponent.getTextTables().getByIndex(0)
oTblColSeps = oTable.TableColumnSeparators
Rem Меняем позицию этих двух разделителей.
oTblColSeps(0).Position = 5000
oTblColSeps(1).Position = 7000
REM Нужно вернуть этот массив обратно в таблицу
oTable.TableColumnSeparators = oTblColSeps
End Sub
Установка оптимальной ширины столбца
В документе OOo Calc можно установить свойство столбца OptimalWidth равным True. Это не так просто для текстовой таблицы с использованием API.
GUI поддерживает метод, который может установить ширину столбца на основе положения текстового курсора, или выделенной части текстовой таблицы. Этот метод доступен через диспетчер (dispatch). В моей книге объяснено, как выделять области в текстовой таблице, поэтому я не буду повторять это обсуждение здесь. Макрос в 8.8.1 выделяет текстовую таблицу целиком и затем устанавливает ширину столбца для всей текстовой таблицы.
Листинг 8.8.1:Установить для всей таблицы оптимальную ширину столбцов.
Sub SetTableOptimumWidth
Dim oDispHelper 'Dispatch helper
Dim oFrame 'Текущций фрейм окна (window frame)
Dim oTable 'Первая таблица в документе
Dim oVCursor 'Видмый курсор
Dim s$
oTable = ThisComponent.getTextTables().getByIndex(0)
ThisComponent.getCurrentController().select(oTable)
oVCursor = ThisComponent.getCurrentController().getViewCursor()
oVCursor.gotoEnd(True)
oVCursor.gotoEnd(True)
oFrame = ThisComponent.CurrentController.Frame
oDispHelper = createUnoService("com.sun.star.frame.DispatchHelper")
s$ = ".uno:SetOptimalColumnWidth"
oDispHelper.executeDispatch(oFrame, s, "", 0, Array())
End Sub
Насколько широка текстовая таблица?
На первый взгляд, очень просто определить ширину текстовой таблицы; используем свойство Width. К сожалению, этого недостаточно. Чтобы определить реальную ширину текстовой таблицы,нужно исследовать свойства, показанные в 15.
Таблица 15:Свойства текстовой таблицы, связанные с шириной текстовой таблицы.
-
Свойство
Описание
LeftMargin
Левое поле таблицы
RightMargin
Правое поле таблицы
HoriOrient
Содержит горизонтальную ориентацию из группы констант com.sun.star.text.HoriOrientation
RelativeWidth
Определяет ширину таблицы относительно ее окружения.
IsWidthRelative
Определяет, действует ли относительная ширина.
Width
Иногда содержит абсолютную ширину таблицы
В моей книге (стр. 307) я упоминаю HoriOrient как управляющее значение для всех остальных свойств. Если свойство HoriOrient содержит значение по умолчанию FULL, то остальные свойства, по существу, бесполезны, включая свойство Width. В этом случае нужно определять ширину столбца, который содержит текстовую таблицу. У меня недостаточно времени объяснить это подробнее.