
- •Полезная информация по Макросам для 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)
Вывод поддерживаемых фонтов
См. мою статью о фонтах на Интернет-сайте
http://www.pitonyak.org/AndrewFontMacro.odt
Этот документ просматривает по очереди все фонты и печатает сведения о каждом с примерами.
Установка фонта по умолчанию с использованием ConfigurationProvider
Чтобы изменить фонт по умолчанию, выполните следующий макрос и перезапустите OOo.
Листинг 5.5.1:Установка фонта по умолчанию с использованием ConfigurationProvider.
Author: Christian Junker
Sub DefaultFont_Change()
Dim nodeArgs(0) As New com.sun.star.beans.PropertyValue
Dim s$
REM Properties
nodeArgs(0).Name = "nodePath"
nodeArgs(0).Value = "org.openoffice.Office.Writer/DefaultFont"
nodeArgs(0).State = com.sun.star.beans.PropertyState.DEFAULT_VALUE
nodeArgs(0).Handle = -1 'no handle!
REM the required Config Services
s = "com.sun.star.comp.configuration.ConfigurationProvider"
Provider = createUnoService(s)
s = "com.sun.star.configuration.ConfigurationUpdateAccess"
UpdateAccess = Provider.createInstanceWithArguments(s, nodeArgs())
REM set your DefaultFont now..
UpdateAccess.Standard = "Arial"
UpdateAccess.Heading = "Arial"
UpdateAccess.List = "Arial"
UpdateAccess.Caption = "Arial"
UpdateAccess.Index = "Arial"
UpdateAccess.commitChanges()
End Sub
Печать текущего документа
Листинг 5.6.1:Печать текущего документа.
'Author: Andrew Pitonyak
'email: andrew@pitonyak.org
Sub PrintCurrentDocument
Dim mPrintopts1(), x as Variant
'Dimensioned at 0, if you set any other properties,
'be certain to set this to a higher value....
Dim mPrintopts2(0) As New com.sun.star.beans.PropertyValue
Dim oDoc As Object, oPrinter As Object
oDoc = ThisComponent
'***********************************
'Do you want to choose a certain printer
'Dim mPrinter(0) As New com.sun.star.beans.PropertyValue
'mPrinter(0).Name="Name"
'mPrinter(0).value="Other printer"
'oDoc.Printer = mPrinter()
'***********************************
'To simply print the document do the following:
'oDoc.Print(mPrintopts1())
'***********************************
'To print pages 1-3, 7, and 9
'mPrintopts2(0).Name="Pages"
'mPrintopts2(0).Value="1-3; 7; 9"
'oDoc.Printer.PaperFormat=com.sun.star.view.PaperFormat.LETTER
'DisplayMethods(oDoc, "propr")
'DisplayMethods(oDoc, "")
oPrinter = oDoc.getPrinter()
MsgBox "Printers " & LBound(oPrinter) & " to " & UBound(oPrinter)
sMsg = ""
For n = LBound(oPrinter) To UBound(oPrinter)
sMsg = sMsg + oPrinter(n).Name + Chr(13)
Next n
MsgBox sMsg,0,"Print Settings"
'DisplayMethods(oPrinter, "propr")
'DisplayMethods(oPrinter, "")
'mPrintopts2(0).Name="PaperFormat"
'mPrintopts2(0).Value=com.sun.star.view.PaperFormat.LETTER
'oDoc.Print(mPrintopts2())
End Sub
Печать текущей страницы
Листинг 5.6.1.1:Печатается только текущая страница.
Dim aPrintOps(0) As New com.sun.star.beans.PropertyValue
oDoc = ThisComponent
oVCurs = oDoc.CurrentController.getViewCursor()
aPrintOps(0).Name = "Pages"
aPrintOps(0).Value = trim(str(oVCurs.getPage()))
oDoc.print(aPrintOps())
Другие параметны печати
Другой заслуживающий рассмотрения параметр - параметр Wait, значение которого устанавливается равным True. Это вызывает синхронную печать и выход из процедуры не происходит до тех пор, пока печать не закончена. Это устраняет необходимость перехватывать события конца печати; предполагается, что Вы хотели бы все же использовать такой перехватчик (listener) события. Заметьте, что имя Вашего принтера может потребоваться заключить в угловые скобки < > , а может и не потребоваться. Кажется, это было связано с сетевыми принтерами, но с тех пор могло измениться.