Организация взаимодействия с приложениями Microsoft Office в Delphi

 

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО

ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«ДАГЕСТАНСКИЙ ГОСУДРАСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ»

ФАКУЛЬТЕТ ИНФОРМАТИКИ

КАФЕДРА ЕСТЕСТВЕННОНАУЧНЫХ ДИСЦИПЛИН





ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА

РАМАЗАНОВА ЗАУРА РАДЖАБОВИЧА

«Организация взаимодействия с приложениями Microsoft Office в Delphi»






Руководитель -

ст. преп.., О.А. Абдурахманов





Махачкала 2012

Содержание


Введение

Глава 1. Средства автоматизации в офисных приложениях

.1. Стандартные и пользовательские макросы

.2. Редактирование макросов

.3. Обработка ошибок

Глава 2. Управление офисными приложениями в проектах Delphi

.1. Нестандартные отчёты - кто и зачем этим занимается

.3. Создание отчётов в Word (различные подходы)

.3. Управление объектами Word и Excel 2000

Заключение

Список литературы

Приложение 1. Описание офисного пакета Openoffice

Приложение 2. Управление OpenOffice в Delphi

Введение


В 70 - 80 годы, когда появились первые модели персональных компьютеров, пользователи должны были писать необходимые им прикладные программы самостоятельно, так как в комплект этих компьютеров входил только минимальный набор программ обеспечивающих ввод - вывод данных (примером может служить, отголосок тех лет, DOS - дисковая операционная система). По этой причине обучение курсам информатики и вычислительной техники, в те времена, подразумевало изучение языка программирования. В настоящее время мы наблюдаем бурное развитие компьютерной техники - тактовые частоты процессоров и объемы памяти выросли в сотни тысяч раз. Стремительное развитие рынка программного обеспечения в 90-е годы привело к появлению большого числа приложений - способных решить практически любую задачу по обработке информации, независимо от ее вида: текст, графика, звук, анимация, видео, если она представлена в цифровом формате. При выполнения повседневных и специализированных задач с помощью персональных компьютеров - на передний план вышло умение пользоваться этими приложениями, и с конечных пользователей было снято бремя программирования. При этом надо учитывать, что разработка с нуля даже самого простейшего приложения (оконной программы) уже было не под силу рядовому пользователю. Созданием программных комплексов занимались целые команды профессиональных программистов, имеющие большой объем знаний и опыта в кодировании приложений.

Положение изменилось с появлением визуальных объектно-ориентированных сред программирования Visual Basic [5], Delphi [1,2,4, 7-13], C++ Builder и др. В них разработка оконного интерфейса программы, выполняемое в форме визуального конструирования, сводится к размещению на форме готовых компонент и заданием их свойств. Весь необходимый код генерируется самой средой программирования автоматически и программист может концентрироваться на разработке алгоритма решения поставленной задачи. Таким образом, оказалось возможным получение вполне рабочей заготовки программы без написания ни одной строки кода.

Однако на сегодняшний день остается актуальной задача автоматизации рутинной последовательности операций, которые необходимо многократно повторять при работе с различными приложениями. Здесь могут помочь как внешние средства - программы позволяющие записать действия пользователя, так и встроенные - скрипты и макросы, реализующие программируемое управление приложениями. Так программы входящие в состав пакета MS Office позволяют сохранять последовательность манипуляций выполняемых пользователем в виде автоматически генерируемых программных кодов - макросов. Но автоматически генерируемые макросы в большинстве случаев не являются универсальными и оказываются непригодными даже при небольшом изменение условий решаемой задачи - параметров обрабатываемого документа. Эта проблема легко решается, если пользователь знает основы программирования и синтаксис встроенного языка и может немного доработав автоматически сгенерированную программу - сделать ее универсальной или адаптировать к условиям другой задачи. В качестве встроенного языка пакета MS Office используется Visual Basic for Application (VBA) [6]. В то же время при обучении программированию также используется язык программирования Pascal, разработанный в 1968 -74 г.г. швейцарским профессором Никлаусом Виртом специально для обучения студентов программированию. Современные версии этого языка Object Pascal реализованы в объектно-ориентированной среде программирования Delphi. В современные курсы программирования основанные на языках Pascal и С++ непосредственно не включаются вопросы автоматизации обработки документов на основе макросов. Но в последние версии программных сред Delphi включаются компоненты для управления программами из пакета MS Office. Неудобство использования этих компонент связано с тем, что они привязаны к конкретной версии офисного пакета MS Office 97/2000/2003/ XP/ 2007. Более универсальный подход реализуется через механизм автоматизации OLE, который позволяет управлять другими приложениями, без привлечения дополнительных компонент. Единственное ограничение в этом случае - это наличие подробной документации по объектам и командам через которые реализуется управление приложением.

В данной работе рассматривается вопрос обучения студентов автоматизации обработки документов в курсах программирования основанных на языке Pascal и среде объектно-ориентированного программирования Delphi.

Предметом дипломной работы являются средства автоматизации и программирования в офисных приложениях.

Цель дипломной работы - рассмотрение компонентов и методов управления офисными приложениями в проектах Delphi.

Работа состоит из введения, двух глав, заключения и приложений. В первой главе рассмотрены средства создания и редактирования макросов - минипрограмм встраиваемых в офисные приложения. Освоение средств автоматизации на основе макросов, позволяет решать текущие, несложные задачи, так созданный в автоматическом режиме макрос, легко дорабатывается путем редактирования, и может служить прототипом разрабатываемого Delphi-приложения.

Вторая глава дипломной работы посвящена вопросам управления документами Word и Excel в проектах Delphi. Рассмотрена методика применения OLE технологии, позволяющей подключаться к установленным приложениям Word и Excel и далее на основе их объектной модели создавать, редактировать и сохранять документы, на основе данных получаемых Delphi программой от пользователя или баз данных.

В приложении приведены данные об элементах технологии автоматизации офисных приложений в OpenOffice [4, 14], набирающем популярность в последние время, ввиду его расширяющейся функциональности и совместимости с MS Office, но являющегося бесплатным в отличии от последнего.

Глава 1. Средства автоматизации в офисных приложениях


Независимо от используемой операционной системы и программных приложений пользователь часто выполняет одни и те же последовательности команд для многих рутинных задач. Вместо повторения последовательности команд каждый раз, когда необходимо выполнить какую-либо задачу, можно создать макрос, который будет выполнять эту последовательность. Макросы позволяют вводить одиночную команду, выполняющую ту же задачу, для реализации которой было бы необходимо вводить несколько команд вручную. Записанные макрорекордером последовательности команд первоначально назывались макрокомандами. Сейчас этот термин сократился до более простого слова - макрос. Применительно к информатике и программным приложениям под словом макрос всегда подразумевается макрокоманда. Макросы, кроме удобства, имеют и другие преимущества. Поскольку компьютеры больше приспособлены для выполнения повторяющихся задач, чем люди, запись макрорекордером неоднократно выполняемых команд повышает точность и скорость работы. Другим преимуществом использования макросов является то, что при их выполнении обычно нет необходимости в присутствии человека-оператора. В случае, если макрос очень длинный или выполняет операции, требующие значительного времени, можно оставить работающий компьютер и делать что-нибудь другое, или переключиться на другое приложение. Макрорекордер (или просто "рекордер") записывает все действия пользователя, включая ошибки и неправильные запуски. Когда программа воспроизводит макрос, она выполняет каждую записанную рекордером команду точно в такой последовательности, в которой она выполнялась во время записи. Первые макрорекордеры имели серьезный недостаток. Если во время записи длинной последовательности действий была допущена ошибка, то единственной возможностью удалить эту ошибку являлась повторная запись макроса. Кроме того, если надо было внести небольшое изменение в длинный макрос, то также приходилось перезаписывать весь макрос. Перезапись длинного макроса часто приводила к дополнительным ошибкам в новой записи. По этим причинам разработчики программного обеспечения добавили макрорекордерам возможность редактирования макросов, чтобы можно было легко исправлять небольшие ошибки или вносить другие изменения в макрос без его полной перезаписи. Каждый макрос записан в VBA.

Обычно макрос содержит следующие элементы.

Ключевое слово Sub. Этим обозначается начало макроса. Из-за ключевого слова Sub (от анг subroutine - подпрограмма) командные макросы также называются процедурами-подпрограммами.

Имя макроса. После ключевого слова Sub Excel добавляет имя макроса, за которым следует открывающаяся и закрывающаяся скобки.

Комментарии. Первые несколько строк кода начинаются с апострофа "'", которые говорят редактору VBA, что эти строки являются комментариями. Комментарии отображаются только в окне редактора, при выполнении макроса они не обрабатываются. В каждом записанном макросе в комментариях указывается имя макроса, а также описание, которые вы ввели в диалоговом окне "Запись макроса".

Макрооператоры. Основное тело макроса (другими словами, строки между ключевыми словами Sub и End Sub, исключая комментарии в начале макроса) состоит из последовательности операторов. Они являются интерпретацией действий, которые вы выполнили во время записи макроса.

Строки макроса в модуле VBA являются обычным текстом, который можно изменять также, как это делается в любом текстовом редакторе. Если макрос содержит операторы, которые необходимо удалить, можно просто удалить лишние строки из модуля.

Часто нужно добавить новые действия в записанный макрос. К сожалению, VBA не предоставляет никаких возможностей записи новых операторов в существующий макрос. Вместо этого, нужно сначала записать новый макрос, содержащий необходимые команды, и отобразить его код на экране. Затем можно использовать стандартные средства Windows копирования и вставки (можно просто перетащить текст из одного окна в другое), чтобы перенести необходимые операторы из нового макроса с исходный.


1.1 Стандартные и пользовательские макросы


В Microsoft Office Word 2007 есть макросы «стили», «оглавление», «нумерация страниц».В макросах «стили» тексту задается: тип шрифта, размер шрифта, положение текста на странице, полужирный, курсив, подчеркнутый, размер межстрочного интервала, цвет. Количество их может сильно меняться, но есть основные как заголовки, «сильная ссылка» и прочие таких как: «цитата», «обычный», «без интервала», «подзаголовок» и т. п. (рис. 1)



В макросе «оглавление» (автособираемое оглавление) собирает оглавление копируя текст ориентируясь на стили заголовков и устанавливает их положение в документе (на какой странице). Всего их 2. (рис.2)


В макросе «нумерация страниц» - ставит номер страницы. Всего их 12. Сверху страницы - 4. Снизу страницы - 4. На полях страницы - 4. (рис. 3).



Создание собственного макроса

Самый простой способ создать макрос - воспользоваться средством записи макросов. Для этого нужно просто запустить средство записи и затем выполнить операции, которые вы хотите автоматизировать (таким образом можно выделить текст, а также выбирать команды меню или изменить опции диалогового окна.) Средство записи переведет все, что вы сделаете, в соответствующие операторы VBA. Результат записи будет сохранен в отдельной области, называемой модулем, откуда можно будет повторить всю процедуру в любое время. Для записи макроса выполняются следующие действия: Открытие и подготовка приложения, в котором будет записывать макрос. В Microsoft Office, например, если хотите записать последовательность параметров форматирования, выделите текст, с которым будете работать. Выберите команду меню Вид => Макросы =>Начать запись (рис. 4а). На экране появится диалоговое окно Запись макроса (рис. 5).




В поле Имя макроса по умолчанию предлагается стандартное имя макроса (такое как Макрос1), но его можно заменить любым другим. Тем не менее, есть несколько ограничений на имена макросов. Имя не может состоять более чем из 255 символов. Первым символом в имени должна быть буква или символ подчеркивания "_". В именах не допускается использование точек и пробелов. В поле "Описание" можно ввести описание макроса. Щелкните на кнопке ОК. В результате вы вернетесь в документ, а под мышкой будет значок кассеты который означает запись макроса, а также отобразится панель инструментов «Остановить запись» и «Пауза» (рис. 4б).

Выполните действия, которые нужно записать в макросе. Поскольку средство записи записывает все ваши действия (кроме щелчков на кнопках, расположенных на панели инструментов "Остановить запись"), будьте внимательны и не выполняйте никаких лишних действий и команд во время записи макроса. После того как все действия будут записаны, выполните команду Вид =>Макросы =>Остановить запись, которая расположена на одноименной панели инструментов. Был создан макрос который выделял весь текст ставил шрифт Times New Roman, размер шрифта 10, положение текста на странице По ширине, альбомная ориентация страницы, отступ по левому и правому и сверху, и снизу - 2см.

Код макроса:

Макрос1()

'' Макрос1 Макрос

'Selection.WholeStory.Font.Name = "Times New Roman".Font.Size = 10.ParagraphFormat.Alignment = wdAlignParagraphJustifyActiveDocument.Styles(wdStyleNormal).Font.NameFarEast = .NameAscii Then

.NameAscii = ""If

.NameFarEast = ""WithActiveDocument.PageSetup

.LineNumbering.Active = False

.Orientation = wdOrientLandscape

.TopMargin = CentimetersToPoints(2)

.BottomMargin = CentimetersToPoints(2)

.LeftMargin = CentimetersToPoints(2)

.RightMargin = CentimetersToPoints(2)

.Gutter = CentimetersToPoints(0)

.HeaderDistance = CentimetersToPoints(1.25)

.FooterDistance = CentimetersToPoints(1.25)

.PageWidth = CentimetersToPoints(29.7)

.PageHeight = CentimetersToPoints(21)

.FirstPageTray = wdPrinterDefaultBin

.OtherPagesTray = wdPrinterDefaultBin

.SectionStart = wdSectionNewPage

.OddAndEvenPagesHeaderFooter = False

.DifferentFirstPageHeaderFooter = False

.VerticalAlignment = wdAlignVerticalTop

.SuppressEndnotes = False

.MirrorMargins = False

.TwoPagesOnOne = False

.BookFoldPrinting = False

.BookFoldRevPrinting = False

.BookFoldPrintingSheets = 1

.GutterPos = wdGutterPosLeftWithSub


Редактирование макроса

Чтобы отредактировать сделанный макрос выполните команду Вид =>Макросы, откроется окно Макрос и выбираем наш записанный макрос (рис. 6). Нажимаем «Изменить». Открывается окно редактирования макроса (рис. 7).




В этом окне можно подкорректировать макрос.

Макрос1 был изменён добавлена красная строка. Код красной строки:


With Selection.ParagraphFormat

.SpaceBeforeAuto = False

.SpaceAfterAuto = False

.FirstLineIndent = CentimetersToPoints(1)

End With


Запуск макросов

Макрос можно запускать из окна Макросы.

Выполните команду Сервис/Макрос/Макросы.

В окне Макросы (Рис. 6) выберите нужный макрос и нажмите кнопку Выполнить.

Для регулярного использования такой способ неудобен.

Макрос можно запускать комбинацией клавиш клавиатуры, если таковая была задана при создании макроса. Если комбинация клавиш забыта или не была задана, то ее можно узнать или задать. Для этого в окне Макросы (см. рис. 6) выберите нужный макрос и нажмите кнопку Параметры. В окне Параметры макроса можно увидеть установленную комбинацию клавиш или назначить комбинацию клавиш.

Основными и наиболее удобными способами запуска макроса являются использование кнопки панели инструментов или графического объекта листа.

Создание кнопки для запуска макроса

Выполните команду Сервис/Настройка.

Во вкладке Команды окна Настройка в категории Макросы выберите команду Настраиваемая кнопка и перетащите ее в любую панель инструментов. Щелкните по кнопке правой кнопкой мыши и в появившемся контекстном меню выберите команду Назначить макрос.

В окне Назначить макрос выберите нужный макрос и нажмите кнопку ОК. Для запуска макроса достаточно нажать созданную кнопку панели инструментов.

Назначение макроса графическому объекту

Макрос можно назначить любому графическому объекту: рисунку из графического файла, рисунку из коллекции Office, фигурному тексту и т. д.

Щелкните по графическому объекту правой кнопкой мыши и выберите команду контекстного меню Назначить макрос.

В окне Назначить макрос объекту выберите нужный макрос и нажмите кнопку ОК. Для запуска макроса достаточно один раз щелкнуть по графическому объекту.


1.2 Редактирование макросов


Для просмотра текста макроса нужно вызвать команду Сервис/Макрос/Макросы.

В окне Макросы выбирается нужный макрос и нажмите кнопку Изменить.

Текст макроса будет открыт в окне редактора Visual Basic. Текст макроса записывается в специальный модуль (Module). Список модулей отображен, как правило, в области Project/VBA Project, расположенной в левой верхней части окна Visual Basic. Если записывается первый макрос, то он помещается в Module1. Последующие макросы могут записываться в автоматически вновь создаваемые модули. Для просмотра содержимого модуля следует дважды щелкнуть по его имени.

Текст макроса отображается в основной части окна. Если весь текст не помещается в окне, можно воспользоваться полосами прокрутки.

Текст макроса начинается командой Sub.

Далее обычно следует имя макроса и описание, заданные в поле Описание окна Запись макроса и сочетание клавиш для запуска макроса, если оно было назначено. Эти данные носят описательный характер, они не исполняются при запуске макроса. Вся эта информация отображена шрифтом зеленого цвета.

Собственно текст макроса отображен шрифтом черного цвета, за исключением ключевых слов (специальных терминов Visual Basic), которые отображаются синим цветом, и ошибок, которые отображаются красным цветом. Текст макроса заканчивается командой End Sub. Структура каждой команды макроса примерно одинакова. Сначала указывается объект, затем символ точки, затем метод (действие), применяемый к данному объекту, или свойство объекта. При указании свойства должно быть указано его значение.

Например, в команде Range("A1:G19").Select:("A1:G19") - объект (диапазон ячеек D2:E18);- метод (выделение).

В команде Selection.Style = "Currency":- объект (выделенное);- свойство (стиль);

"Currency" - значение свойства (стиль денежный).

Запись макроса протоколированием действий вносит в него много лишних команд.

Редактор Visual Basic

После записи рассмотренного выше макроса к шаблону Normal добавился следующий текст макроса:


Sub Arial_10_bold()


Arial_10_bold Macro

Arial 10 Полужирный

Selection.Font

.Name = "Arial"

.Size = 10

.Bold = True

.Italic = False

.Underline = wdUnderlineNone

.UnderlineColor = wdColorAutomatic

.StrikeThrough = False

.DoubleStrikeThrough = False

.Outline = False

.Emboss = False

.Shadow = False

.Hidden = False

.SmallCaps = False

.AllCaps = False

.Color = wdColorAutomatic

.Engrave = False

.Superscript = False

.Subscript = False

.Spacing = 0

.Scaling = 100

.Position = 0

.Kerning = 0

.Animation = wdAnimationNoneWithSub


Наверняка пользователям, незнакомым с программированием, такой текст покажется очень сложным, однако при ближайшем рассмотрении оказывается, что это простой набор параметров, которые установлены или не установлены. Установленный параметр обозначается словом True, а неустановленный - False.

Для записи макросов, как и для других команд, в Microsoft Word используется язык Visual Basic for Applications (VBA, Visual Basic для приложений). Макрос представляет собой набор команд и операторов на VBA. Каждая команда и действие в Microsoft Word представлены в виде строк формата VBA, процесс записи макроса тоже представляет собой формирование таких строк.

Таким образом, пользователь имеет возможность изменить или создать макрос без повторного выполнения всей процедуры. Хотя макрос VBA можно создать в любом текстовом редакторе, не стоит пренебрегать возможностью записи макроса в Word. Макросу, созданному при помощи Microsoft Word, можно добавлять новые команды и функции, а также на таких макросах можно изучать язык VBA. Макросы можно редактировать, используя специальную утилиту, которая входит в поставку Microsoft Office, - редактор Visual Basic. Данная программа содержит возможности, которые позволяют работать с макросом: тестировать, отлаживать, запускать на выполнение. Используя этот редактор, можно добавлять, изменять и удалять объекты в макросах, создавать пользовательские диалоговые окна, отлаживать код программных процедур, просматривать и выбирать компоненты текущих проектов и библиотек, определять вид и поведение объектов макроса во время выполнения и выполнять многое другое.

Окно редактора Visual Basic можно открыть несколькими способами, например нажав кнопку Visual Basic на панели Разработчик.

Изменение макроса

Редактирование текста макроса можно производить непосредственным вводом команд с клавиатуры или вставкой команд из других макросов (объединением макросов).

Редактирование с использованием клавиатуры

Редактирование текста макроса с использованием клавиатуры производится, в принципе, так же, как и обычного текста. Можно изменять содержание команд, можно удалить ненужные команды, можно вводить новые команды.

При редактировании макроса следует изменять некоторые команды, которые при записи Microsoft Excel понял излишне буквально. Например, при переименовании листа создается две команды:


Sheets("Лист1").Select

Sheets("Лист1").Name = "Новый"


Первая команда определяет имя листа, который следует переименовывать, а вторая присваивает указанное имя. Первая команда вообще не нужна, поскольку переименовываемый лист уже является текущим (выбранным). Кроме того, если лист будет иметь другое имя, макрос выдаст сообщение об ошибке. Вместо двух команд, можно записать одну:ActiveSheet.Name = "Новый" Во многих случая можно удалять свойства объектов, если значение свойства не влияет на результат работы макроса. Например, при вставке значений с использованием специальной вставки в команде:


Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False


можно удалить свойства SkipBlanks:=False и Transpose:=False, которые указывают, что при специальной вставке не нужно пропускать пустые ячейки и транспонировать данные. Кроме того, в этой же команде можно удалить свойство Operation:=xlNone.

Таким образом, команда будет иметь вид:

.PasteSpecial Paste:=xlPasteValues


Перед удалением какой-либо команды можно проверить, как макрос будет без нее работать. Для этого команду можно отключить. Для отключения команды поставьте курсор в строку этой команды и нажмите кнопку Comment Block панели инструментов Edit. Отключенная строка отображена шрифтом зеленого цвета. В начале строки стоит знак апострофа. Если макрос успешно работает и без отключенной команды, ее можно удалить. В противном случае, ее следует снова активизировать. Для этого следует поставить курсор в строку этой команды и нажать кнопку Uncomment Block панели инструментов Edit. В процессе редактирования макроса можно пользоваться кнопками Undo (Отменить) и Redo (Вернуть) панели инструментов Standard.

Редактирование объединением макросов

В некоторых случаях редактирование макроса с использованием клавиатуры слишком трудоемко. Гораздо проще записать новый макрос, выполняющий необходимые действия, а потом объединить существующий макрос с новым. Новый макрос записывается обычным порядком. После записи макроса следует перейти в режим просмотра этого макроса. При необходимости можно внести исправления в содержание макроса с помощью клавиатуры (например, удалить лишние команды). Затем необходимо выделить необходимые команды макроса, откопировать их в буфер обмена и вставить в соответствующее место редактируемого макроса. Объединить макросы можно и другим способом. В редактируемый макрос можно вставить имя дополнительного макроса. В результате, при выполнении макроса будет автоматически запущен указанный макрос. После его выполнения текущий макрос продолжит свою работу. Следует иметь в виду, что новый макрос может быть помещен в другой модуль. Для перехода между модулями в окне Visual Basic используют область Project/VBA Project Если эта область не отображается, следует выполнить команду View/Project Explorer.


1.3 Обработка ошибок


Записанный макрос не в каждой ситуации может работать правильно. Это может быть вызвано как особенностями работы Microsoft Excel, так и ошибками при редактировании макроса. Если выполнение макроса невозможно, будет выдано сообщение об ошибке, в котором указан номер ошибки и приведен краткий комментарий. Комментарий может быть как на русском языке, так и на английском. Если нажать кнопку End, выполнение макроса прекратится. Если нажать кнопку Help, запустится справочная система Microsoft Excel и появится окно со справкой по этой ошибке. Если нажать кнопку Debug, откроется окно Visual Basic, в котором будет отмечена строка макроса, вызвавшая ошибку выполнения

В зависимости от характера ошибки ее необходимо исправить или обойти.

Если ошибка вызвана неправильным редактированием макроса, в текст макроса следует внести исправления, а затем закрыть окно Visual Basic. В запросе на прекращение процесса отладки , следует нажать кнопку ОК, а затем снова запустить макрос. Если же ошибка работы макроса связана с особенностями ситуации, то можно внести в макрос команды, позволяющие обойти эту ошибку. Наиболее универсальная команда обхода ошибок в макросах: On Error GoTo a, где а - метка, к которой следует перейти при обнаружении ошибки. В качестве метки можно использовать буквы, цифры или их сочетания. Пробелы использовать нельзя. Метка в тексте макроса вводится с двоеточием отдельной строкой: Команду On Error GoTo a можно ввести первой строкой макроса, для того, чтобы она перехватывала все ошибки. Метку можно ввести перед той командой макроса, которая должна выполняться после ошибочной команды. Если при обнаружении ошибки следует прекратить выполнения макроса, то метку следует ввести перед строкой завершения работы макроса.

После необходимого редактирования и создания команды обхода ошибки текст макроса примет следующий вид:

Валюты()

'

' Валюты Макрос

' Макрос записан 02.01.2007 (Spiridonov)Error GoTo a.Add.Name = "Новый"("Курсы валют").Select("A1:G19").Select.Copy("Новый").Select.PasteSpecial Paste:=xlPasteValues.Replace What:=".", Replacement:="."

Range("H2").Select.FormulaR1C1 = "=RC[-4]/RC[-6]".AutoFill Destination:=Range("H2:H19")("H2:H19").Select.Copy("D2").Select.PasteSpecial Paste:=xlPasteValues("A:B,E:H").Select.Delete Shift:=xlToLeft("B:B").Select.Style = "Currency"("A:B").EntireColumn.AutoFit("A1").Select.Name = Date

Границы:SubГраницы()

'

' Границы Макрос

' Макрос записан 02.01.2007 (Spiridonov)("A1:B19").Select.Borders(xlEdgeLeft).LineStyle = xlContinuous.Borders(xlEdgeTop).LineStyle = xlContinuous.Borders(xlEdgeBottom).LineStyle = xlContinuous.Borders(xlEdgeRight).LineStyle = xlContinuous.Borders(xlInsideVertical).LineStyle = xlContinuous.Borders(xlInsideHorizontal).LineStyle = xlContinuous("A1").SelectSub


Удаление макросов

Для удаления макроса выполните команду Сервис/Макрос/Макросы, в окне Макросы выберите макрос и нажмите кнопку Удалить. В окне запроса следует нажать кнопку Да. В окне Microsoft Excel отменить удаление макроса невозможно. Но если сразу же после удаления макроса открыть окно Visual Basic, то, нажав кнопку Undo (Отменить), удаление макроса можно отменить.

Подписывание макросов

При установленном высоком уровне безопасности неподписанный макрос при открытии файла будет отключен и, соответственно, не будет запускаться, даже если он написан самим пользователем.

  1. Для подписи макроса необходимо получить сертификат.
  2. Для подписи коммерческих макросов следует получить заверенный сертификат в официальном коммерческом центре сертификации.

Для личного использования сертификат цифровой подписи можно создать самостоятельно с помощью программы Цифровой сертификат для проектов VBA. макрос офисный приложение delphi

Создание цифрового сертификата

Для запуска программы создания цифрового сертификата откройте Главное меню Windows и выберите команду Все программы Microsoft Office\Средства Microsoft Office. В окне Создание цифрового сертификата введите имя сертификата и нажмите кнопку ОК. Теперь цифровой сертификат создан, и его можно использовать для подписывания макросов.

Добавление цифровой подписи к макросу

Для добавления цифровой подписи в режиме просмотра макроса в окне редактора Visual Basic выполните команду Tools/Digital Signature. В окне Цифровая подпись нажмите кнопку Выбрать. В окне Выбор сертификата выберите сертификат, используемый для подписи, и нажмите кнопку ОК.

После того, как имя сертификата будет указано в окне Цифровая подпись, нажмите кнопку ОК. Цифровая подпись к макросу добавлена.

Глава 2. Управление офисными приложениями в проектах Delphi


На каждом предприятии, будь то малый бизнес и огромный завод, немалую роль играет составление документации и отчётов. Почти всегда этим занимается специально выделенный человек. Так заведено уже давно, но теперь всё чаще появляются инициативные руководители, стремящиеся свести эти горы однотипной рутинной работы с человека на машину. Для этого и используют программы автоматизации производства. Эти программы автоматически генерируют требуемую документацию. Зачастую это сводится к работе с базами данных и библиотеками. Есть много программ делающих это. Но типов таковой документации столь много, что современные программные монстры, такие как пользовательская программа (MS ACCESS) или программируемый монстр (ORACLE) не в состоянии обеспечить даже половины нужд. Ведь у каждого предприятия своя с годами сложившаяся традиция заполнения документации или свой "Норма контроль" с заданными обязательными параметрами. Универсальной программы такого сорта нет и быть не может. Поскольку специфика работы предприятия может быть как гибкой в области документации (коммерческий ларёк), так и строго установленной на мировом уровне (банк или производственная сфера). Для решения этих проблем используют нестандартные отчёты. Отчеты, сделанные специально под требования, наложенные на их оформления. Вы только представьте, ту работу, которую сотрудник выполнял несколько месяцев, программа сделает за пару минут!!! И это вполне реально. Данная статья представляет собой набор советов и примеров, которые помогут разработчику разобраться в столь оставленной без внимания теме, как автоматизация производства. Поскольку документации по этой теме практически нет, то пару хорошо документированных примеров помогут резко уменьшить время разработки таких программ с месяцев до недель. Но хотя по предлагаемой информации уже были созданы описанные выше программы, этой информации может всё равно оказаться недостаточно. Иллюстрирующие примеры приводятся на языке Delphi (версии 5 и выше). Выбор был остановлен на Delphi в виду её простоты и наглядности, но все идеи и реализации, изложенные в дипломной работе, легко переносятся на любой другой обьектно-ориентированный язык программирования высокого уровня.


2.1 Нестандартные отчёты - кто и зачем этим занимается


На вопрос "зачем" приведено уже достаточно аргументации. Но всё-таки это не всё, остановимся на ещё неописанных проблемах.

Первый вопрос, который может быть задан - это где можно это использовать кроме как на предприятии, сфера применимости данной технологии довольно широка, рассмотрим некоторые вопросы и варианты их решения по средствам работы с Word и созданием отчётов:

Удобство интерфейса, когда информацию пользователю предоставлятся прямо через Word, где он сможет либо распечатать её, либо внести необходимые корректировки или сохранить себе копию. Чтобы реализовать это как-либо иначе уйдёт слишком много времени, а интерфейс Word интуитивен, знаком и понятен, так что ряд проблем просто отпадает.

Становятся доступными все средства, которыми располагает Word. В том числе проигрывание видео и аудио записей, выдача изображений, кроме того, становятся доступны любые возможности конвертации файлов (Например, можно не используя тегов через Word создать документ HTML)

Реальностью становится программа, анализирующая документы формата Word на диске и создание библиотеки вида название документа = имя файла, причём всю информацию можно напрямую собирать из WORD документов.

Можно реализовывать локальные операции, допустим, все файлы Word перевести в DOSовские TXT файлы. И многое, многое другое.

А на счёт кто же этим занимается? Эта информация может быть полезна руководителям. Любой Windows программист с высшим или средне специальным образованием, знакомый с ЯВУ и ООП. Такого вида программистов часто называют прикладными. Срок изготовления в среднем 2-3 месяца с учётом бета тестирования.

Основы работы с OLE

На программном уровне работа с Word заключается в использовании OLE. Основная структура взаимодействия такова: Существует программа СЕРВЕР, которая считается главной и именно она выполняет все операции, в нашем случае сервером является программа Word. Из этих слов уже ясно, что если Word не установлен на компьютере, то есть сервер отсутствует, то ничего выполнено быть не может. Просто некому будет выполнять. Это, по сути, наиболее распространенный вопрос среди программистов среднего класса. Вторая взаимодействующая программа - это программа КЛИЕНТ, все, что она делает - это связывается с сервером и просит его выполнить необходимые операции, сама по себе она ничего не может. В результате такого взаимодействия и решается поставленная задача. Теперь рассмотрим реализацию:


procedure Word.Run;, verr1: string;, verrI: integer;= ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];:= CreateOleObject('Word.Application');.Visible := False;(1, 'Microsoft Word не установлен');;:= Trim(Version);:= '';i := 1 to Length(verr) donot (verr[i] in DigiChar) then:= verr1 + verr[i];:= StrToInt(verr1);verrI<

9 then(1, 'Требуется WORD 2000/XP или выше');;


Эта процедура связывает переменную MsWord с Ole, в результате чего подгружается сам WORD, далее мы делаем его пока невидимым и проверяем версию, пояснения процедуры проверки версии будут позже.


type= classVersion: string; //shadowError(i: integer; str: string); //intro

MsWord: Variant; // Main;


Главный класс, в котором описаны основные переменные и процедуры необходимые для корректной работы с Word. Следует помнить и совершать все необходимые проверки совместимости сразу, чтобы избежать некорректной работы впоследствии. В случае отсутствия Ворд или несоответствия версии необходимо сразу предупредить об этом пользователя для принятия необходимых мер...

Ошибки при вызове Word.

Для начала опишем процедуру загрузки в Word DOC файла, делается это так:


procedure Word.Open(fileName: string);.Documents.Add(fileName, EmptyParam);(2, 'файл не найден');;

end;

Можно к уже открытому добавить ещё один, так чтобы в итоге из двух получить один.

procedure Word.Open_Next(fileName: string);.Selection.InsertFile(FileName := filename, ConfirmConversions :=, Link := false);(2, 'файл не найден');

end;;

вот и процедура, которая наиболее часто используется в приложениях такого типа!


procedure Word.Error(i: integer; str: string);i of

:(str);

showmessage('Продолжение работы невозможно');.Terminate;

end;

:(str);('Продолжение работы невозможно');.Terminate;;;(str);;

end;


А теперь рассмотрим проблемы, которые встречаются при работе с Word, о которых говорилось ранее.

Если установить Word и попытаться сразу связаться с ним через Ole, то ничего не получится, дело в том, что при первом запуске Word программа предлагает напечатать тестовую страницу, при этом, никак не сообщив об этом Ole клиенту. Из-за чего в работе вашей программы может происходить сбой. И исправлению эта ошибка не подлежит, данная неприятность - дело рук компании MICROSOFT создавшей Word и пока она эту проблему решать не собирается, как видно из WORD XP.

Ещё может быть ситуация, когда открываемый Word файл уже занят другим приложением, или копией вашего, тогда Word предлагает использовать режим только для чтения, а по освобождению ресурса предлагает переход в возможность редактирования. Это тоже влияет на работу клиентской программы, поскольку требует от пользователя согласия на изменение режимов.

Файл, который вы открываете, просто не существует. Эту проблему вам придётся решать средствами языка разработки. W Word ORD подобные сервисы не предоставляет.


2.3 Создание отчётов в Word (различные подходы)


Существует несколько подходов создания нестандартных отчётов в Word, используя OLE технологии, рассмотрим их по порядку:

Это стандартный подход. Клиент делает запрос, сервер выполняет, клиент делает следующий запрос и так далее, пока задача не будет решена.

Можно использовать встроенный в Word язык VBA, написать необходимые макросы на Visual Basic Script и внедрить их в текущий документ, тогда останется только вызывать их и всё. За счёт этого можно реально выиграть во времени, но волею случая этот метод в основном используется в компьютерных вирусах, за счёт чего относится к вирусным технологиям и из-за этого некоторые антивирусы могут определять вашу программу как инфицированную Word вирусом. Поэтому данный метод так и не получил распространения среди Ole программ.

Третий метод - самый важный, а заключается он в сочетании первых двух, таким образом, демонстрируя взаимное дополнение подходов.

Для воплощения любого из 3-х подходов необходимы ещё дополнительные действия. Если требуется записывать/читать с определённой позиции в тексте или необходимо работать с таблицей, то надо расставить закладки в нужных позициях документа. Это лучше всего сделать в шаблонном документе вручную.

Потом надо будет найти эти закладки в тексте и перейти к ним. Для начала, напишем процедуру поиска закладки и перехода к ней.


procedure Word.search(data: string);, Which, Count, Name: OLEVariant;:= -1;:= unAssigned;:= unAssigned;:= data;.Selection.goto(What, Which, Count, Name);

end;


Теперь закладку мы нашли запишем в то место что-нибудь


procedure Word.insert(info: string; _bold, _italic, _StrikeThrough, _Underline:; _Size: integer; _center: boolean);.Selection.Font.Bold := _bold;.Selection.Font.italic := _italic;.Selection.Font.StrikeThrough := _StrikeThrough;.Selection.Font.Underline := _Underline;.Selection.Font.Size := _Size;_center = true then.Selection.ParagraphFormat.Alignment := 1;.selection.TypeText(info);;


Великолепно, кроме простой записи, мы получили, и доступ к конфигурации текста и можем писать текст с атрибутами жирный, курсив, зачёркнутый, подчёркнутый, указывать размер шрифта и даже отслеживать центровку, поверите мне - этого более чем достаточно для реализации программ любой степени сложности!

Теперь напишем процедуру перехода к следующей ячейке таблицы, считаем, что на первую мы перешли по закладке!


procedure Word.NextCell;.Run('NextCell');

end;


Таким же образом запускаются макросы Word, только вместо NextCell надо вставить имя макроса который хотим запустить. Важно не забывать, что через Ole можно вызывать только "свободные макросы" то есть без параметров!!! (VIRUS TECHNOLOGIES NOT FOR GAME)

А вот ещё процедура. Она позволяет пропускать нужное число ячеек таблицы с учётом, что позиционирования на закладке ещё возможно не было.


procedure Word.SkipCell(n: integer);: integer;n<

then;not NewList theni := 1 to n do.Run('NextCell');if n>

then('a1');i := 1 to n - 1 do.Run('NextCell')

search('a1');;;

- переменная булевского типа, отвечающая за начало нового листа и новой таблицы на нём.

a1 - закладка на первую ячейку таблицы.

Есть ещё команда по работе с закладками. Это удаление.


MsWord.ActiveDocument.Bookmarks.Item(1).Delete;


Данная команда удаляет первую закладку. Это очень удобно для многостраничного документа.

Ведь каждая страница содержит одинаковые закладки, поэтому, прежде чем загрузить новую страницу необходимо удалить старые закладки, иначе закладки не загрузятся.

Полезная процедура для всех типов подходов к ole программированию. Она пересчитывает сантиметры в пиксели.


function Word.CentimetersToPoints(a: Single): Single;

{Converts a measurement from centimeters to points (1 cm = 28.35 points).the converted measurement as a Single..CentimetersToPoints(Centimeters)Optional. An expression that returns an Application object.Required Single. The centimeter value to be converted to points.}

Result := 28.35 * a;;


Предварительная настройка страницы WORD.

Одной из самых распространенных проблем работы с Ole Word - различные настройки конфигурации у разных версий Word и на разных машинах, Вследствие чего иногда документ воспроизводится некорректно. Эту проблему можно решить, задав параметры конфигурации страницы вручную. Среди таких настроек отдельно можно выделить возможности корректировки отступов справа, слева, сверху и снизу, а также ряд других параметров.


procedure Word.Normalize;

//MsWord.ActiveDocument.PageSetup.LineNumbering.Active := False;

//MsWord.ActiveDocument.PageSetup.Orientation :=0;// wdOrientPortrait;.ActiveDocument.PageSetup.TopMargin := CentimetersToPoints(0.75);.ActiveDocument.PageSetup.BottomMargin := CentimetersToPoints(0.2);.ActiveDocument.PageSetup.LeftMargin := CentimetersToPoints(0.5);.ActiveDocument.PageSetup.RightMargin := CentimetersToPoints(0.5);.ActiveDocument.PageSetup.Gutter := CentimetersToPoints(0);.ActiveDocument.PageSetup.HeaderDistance := CentimetersToPoints(1.27);.ActiveDocument.PageSetup.FooterDistance := CentimetersToPoints(1.27);

//MsWord.ActiveDocument.PageSetup.PageWidth := CentimetersToPoints(21);

//MsWord.ActiveDocument.PageSetup.PageHeight := CentimetersToPoints(29.7);

//MsWord.ActiveDocument.PageSetup.FirstPageTray :=0;// wdPrinterDefaultBin;

//MsWord.ActiveDocument.PageSetup.OtherPagesTray :=0;// wdPrinterDefaultBin;

//MsWord.ActiveDocument.PageSetup.SectionStart :=2;// wdSectionNewPage;

//MsWord.ActiveDocument.PageSetup.OddAndEvenPagesHeaderFooter := False;

//MsWord.ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter := False;

//MsWord.ActiveDocument.PageSetup.VerticalAlignment :=0;// wdAlignVerticalTop;

//MsWord.ActiveDocument.PageSetup.SuppressEndnotes := False;

//MsWord.ActiveDocument.PageSetup.MirrorMargins := False;

//MsWord.ActiveDocument.PageSetup.TwoPagesOnOne := False;

//MsWord.ActiveDocument.PageSetup.GutterPos :=0;// wdGutterPosLeft;

end;


Как вы видите, ряд настроек закомментирован, и это не случайность. Поскольку каждое обращение к серверу занимает время, то слишком объемное конфигурирование системы может привести к тому, что пользователь подумает, что программа, должно быть, зависла и перезагрузится, не дав выполнить всё конфигурирование целиком. Поэтому я советую ввести эту возможность как полезную утилиту программы, типа: Full Correction

Полезные утилиты.

Вообще-то всего описанного выше вполне достаточно для работы, но рассмотрим еще ряд полезных фрагментов кода.

Получить версию Word:


function Word.Version: string;: string;:= MsWord.Version;:= verr;;

Закрыть Word:Word.Quit;.Quit;;

Закрыть документ Word:Word.Close;.Documents.Close;;

Сохранить активный документ:Word.Save(Name: string);.ActiveDocument.SaveAs(FileName := Name);

end;

Отправка активного документа на печать:

procedure Word.Print;.ActiveDocument.Print;

end;


Разрыв страницы - переход к новой странице. Реализуется так:

.Selection.InsertBreak;


2.3 Управление объектами Word и Excel 2000


Использование автоматизации OLE применительно к Word и Excel доступна учащимся, поскольку в эти программы встроена справка по VBA, содержащая описание всех объектов, свойств и методов. Так что студент или школьник просто получает возможность работать с ними из приложения Delphi. Ниже рассмотрены основные операции, используемые при работе с Word и Excel, независимо от версии Microsoft Office.

Приложение должно содержать оператор:


Uses ComObj, Word2000;


Этот оператор подключает модуль ComObj, который необходим для работы с объектами OLE. А модуль Word2000 не является обязательным. Он потребуется только потому, что содержит объявления ряда констант, задающих значения параметров передаваемых в Word при манипуляциях с его объектами.

Для работы с Word и входящими в него объектами нужно объявить следующие глобальные переменные: Var Word, Document, MyRange, Selection: OleVariant;

Переменные Word и Document будут связываться соответственно с экземпляром Word и документом загруженным в него.

Запуск нового экземпляра Word и доступ к нему осуществляется оператором:


Word := CreateOleObject('Word.Application');


Этот оператор использует функцию CreateOleObject, которая создает объект класса, указанного ее аргументом, и возвращает ссылку на идентификатор интерфейса типа IDispatch, используемый для связи с объектом. Таким образом, оператор запускает новый экземпляр Excel, с которым в дальнейшем будет проводиться работа.

Если желательно не создавать новый экземпляр Word, а подключиться к уже выполняющемуся на компьютере, то вместо приведенного выше оператора следует выполнить оператор:


Word := GetActiveOleObject(Word.Application');


Функция GetActiveOleObject выполняет функции, аналогичные CreateOleObject, но отличается тем, что соединяется с уже выполняющимся экземпляром программы. Если выполняющегося зарегистрированного объекта OLE нет или объект не имеет интерфейса IDispatch, генерируется исключение OleSysError. Таким образом, если желательно соединиться с выполняющимся экземпляром Word, а при его отсутствии создать новый экземпляр с открытием файла документа в нем, это можно сделать следующим образом:


try:=GetActiveOleObject('Word.Application');

ShowMessage('Ошибка - ни один документ не открыт');

if OpenDialog1.Execute then begin:=CreateOleObject('Word.Application');.Documents.open(OpenDialog1.FileName );.visible:=true;

end;


В запущенном экземпляре Word обычно по умолчанию включена функция автоматической проверки правописания. Это может стать причиной резко снижения производительности из-за того, что Word будет выполнять проверку при каждом изменении текста. Поэтому полезно отключить автопроверку орфографии, особенно если обработка документа осуществляется «за кадром» - в скрытом окне Word. Программно отключение автопроверки правописания выполняется установкой соответствующих свойств опций активного экземпляра Word:


Word.Options.CheckSpellingAsYouType:=false;.Options.CheckGrammarAsYouType:=false;


Дальнейшая работа с экземпляром Word проводится с помощью объектов, их свойств и методов, описанных в справке по VB Word [6]. Все операции достаточно просты и близки к тому, что можно найти во встроенной справке.

Следующий фрагмент программного кода демонстрирует обработку текста активного документа:


document:=Word.ActiveDocument;:=1;:= document.Characters.count;i < n do begin.Characters.item(i).font.color := Random(280000);:=i+1;

end;


Управление объектами Excel

Для работы с Excel и входящими в Excel объектами можно объявить следующие глобальные переменные:


var Excel, WorkBook, Worksheet, MyRange, V: OleVariant;


Переменная Excel будет связана с экземпляром Excel. Переменные WorkBook и Worksheet будут связываться соответственно с рабочей книгой и ее листом. Переменная MyRange будет связываться с Range - диапазоном выделенных ячеек. Переменная V может содержать значения, полученные из ячеек таблицы Excel или записываемые в них.

Подключение к активному или создание нового экземпляра объекта Excel:


try:=GetActiveOleObject('Excel.Application');:=CreateOleObject(Excel.Application');.visible:=true;

end;


Открытие новой рабочей книги осуществляется оператором


WorkBook := Excel.WorkBooks.Add;


В результате переменная WorkBook обеспечит доступ к новой книге.

Новая книга создается с числом листов по умолчанию. Это число можно изменить с помощью свойства SheetsInNewWorkbook. Например, следующий оператор задает число листов по умолчанию, равное 1.


Excel.SheetsInNewWorkbook := 1 ;


Открыть рабочую книгу, хранящуюся в указанном пользователем файле можно оператором:


if OpenDialogl.ExecuteWorkBook := Excel.WorkBooks.Open(OpenDialogl.FileName);


Закрыть рабочую книгу можно оператором WorkBook.Close;

Если в книге были сделаны изменения, то в результате выполнения приведенного оператора будет показан запрос о необходимости сохранения книги. Если вме-:то приведенного оператора вы напишете:


WorkBook.Close(SaveChanges := false);


то ни запроса, ни сохранения не будет. А оператор вида:


WorkBook.Close(SaveChanges := true, FileName := 'WorkBookl');


сохранит измененную рабочую книгу в файле с указанным именем WorkBookl.xls.

Следующие операторы соединяют переменную Worksheet с листом, имеющим имя «Лист1» и делают этот лист активным:


Worksheet := WorkBook.Worksheets.Item['Лист1']; Worksheet.Activate;


Следующие операторы соединяют переменную Worksheet с активной книгой, выделяют на его активном листе ячейку, имя которой задано в окне редактирования Editl (например, "А1"), и заносят в эту ячейку значение, заданное в окне редактирования Edit2 полужирным красным шрифтом:


Worksheet := WorkBook.ActiveSheet;:= WorkSheet.Range[Editl.Text];.Value := Edit2.Text;.Font.Bold := true;.Font.Color := clRed;


Ниже приведены аналогичные операторы, читающие данные из указанной ячейки:


Worksheet := WorkBook.ActiveSheet;:= WorkSheet.Range[Editl.Text];:= MyRange.Value;(V);


Занесение множества данных в совокупность ячеек ничем.

Работа с диалогами Excel не требует задания значений необязательных параметров. Например, вызов диалога открытия файла рабочей книги осуществляется следующим оператором:


Excel.Dialogs[xlDialogOpen].Show;


Вызов диалога печати осуществляется оператором:


Excel.Dialogs[xlDialogPrint].Show;


Впрочем, печать можно осуществлять и без диалога методом Printout:


Excel.ActiveSheet.Printout;


Приведенный оператор печатает одну копию активного листа. Но можно задавать и параметры печати. Например, следующий оператор обеспечивает предварительный просмотр печатаемого документа и последующую печать двух копий:


Excel.ActiveSheet.Printout(Preview : = true, Copies := 2);


А просто предварительный просмотр активного листа перед печатью осуществляется оператором:


Excel.ActiveSheet.PrintPreview;


Аналогичным образом с помощью автоматизации OLE можно получить доступ к Access. Конечно, все, что можно сделать в Access, можно сделать и в Delphi, причем более эффективно. Но если пользователь привык работать со средой Access, то может иметь смысл предоставить ему возможность вызвать знакомый инструмент из приложения Delphi. Конечно, при этом всю обработку данных целесообразно проводить в фоновом режиме с помощью приложения Delphi.

Связь с Access можно реализовать следующим образом:


uses ComObj, Access2000;

var Access: OleVariant;:= CreateOleObject('Access.Application');.Visible := true;


Ну а все дальнейшее делается с помощью объектов Access, их свойств, методов и событий. Информацию обо всем этом можно почерпнуть из справки по VBA, встроенной в Access.

Заключение


Приведенных примеров кода должно быть достаточно для начала разработки простейших приложений с помощью автоматизации OLE. Простота программного кода здесь обеспечивается отсутствием необходимости задавать значения необязательных параметров. Перечисление параметров в вызове метода допускается в любой последовательности. В целом использование автоматизации OLE очень близко к VB и все не рассмотренные выше возможности работы с Word и Excel учащиеся легко могут реализовать, познакомившись со встроенной в MS Office справкой по программированию.

Вопросы, затронутые в данной работе, могут быть полезными при проведении практических занятий по программированию и информационным технологиям. Материал доступен старшеклассникам и студентам первых курсов увлекающихся программированием. В школьном курсе информатики и ИКТ тема может быть раскрыта в рамках элективных курсов. Так что учащиеся, освоившие технологию управления офисными приложениями, смогут разрабатывать свои учебно-прикладные программы, используя расширенные средства офисных пакетов, и совершенствуя навыки, необходимые в будущей профессиональной деятельности.

Отметим так же, что встроенные средства автоматизации есть во многих профессиональных программных пакетах, таких как - графический редактор Corel Draw, системе трехмерного моделирования 3D Max, в системе AutoCAD, в пакете программ 1С Предприятие и многих других. Поэтому опыт, решения задач автоматизации операций в офисных пакетах, будет полезен в работе во многих других областях и сферах применения информационных технологий.


Список литературы


  1. Архангельский А.Я. Приемы программирования в Delphi. - М.: ООО «Бином-Пресс», 2003 г.
  2. Архангельский А.Я. Программирование в Delphi 5. - 2-е изд. - М.: ЗАО «Издательство Бином». 2000 г.
  3. Васильков Ю. В. Первые шаги в автоматизации OpenOffice.Calc и OpenOffice.Writer под Delphi. #"center">Приложение 1


    Описание офисного пакета Openoffice

    История создания

    Код StarOffice, изначально разрабатываемого немецкой компанией StarDivision в рамках собственного проекта, был куплен Sun Microsystems в 1999 году. В августе 1999 версия StarOffice 5.2 была сделана бесплатной.

    июля 2000 года, Sun Microsystems анонсировала, что делает исходный код StarOffice доступным для скачивания одновременно под лицензиями LGPL и SISSL с намерением создать вокруг программного обеспечения сообщество для разработки открытого исходного кода. Новый проект стал известен как OpenOffice.org, и его сайт начал своё существование 13 октября 2000 года.

    В начале 2003 года началась работа над версией 2.0. Были поставлены следующие цели:

    • улучшенное взаимодействие с Microsoft Office;
    • улучшенная производительность - снижение требований к памяти и увеличение скорости работы;
    • улучшение скриптового языка;
    • улучшенная интеграция, в частности с GNOME;
    • более лёгкий для использования интерфейс работы с базами данных: front-end для создания отчётов, форм и запросов;
    • новая встроенная SQL-база;
    • улучшенный пользовательский интерфейс.

    В настоящее время из одного исходного кода, разрабатываемого сообществом OpenOffice.org выпускаются два продукта: StarOffice, в который добавляются компоненты под проприетарной лицензией и свободный OpenOffice.org [14]. В настоящее время в OpenOffice.org большинство проприетарных компонентов, присутствующий в StarOffice заменено их свободными аналогами.

    OpenOffice.org - это международный проект с открытыми исходными кодами, созданный для того, чтобы разработать универсальный офисный пакет, работающий на разных операционных платформах, имеющий открытый API и формат файлов, основанный на XML..org - это пакет офисных приложений, разработанный в рамках данного проекта, совместимый с Microsoft Office, который позволяет работать с текстовыми документами, электронными таблицами, презентациями, графиками, базами данных и т.д..org - это полнофункциональный пакет офисных приложений с многоязыковой поддержкой, работающий под всеми основными операционными системами. OpenOffice.org позволяет хранить все ваши данные в открытом формате OpenDocument Format (ODF), одобренным международной организацией по стандартизации ISO (ISO/IEC 26300:2006), предусматривает наличие встроенной функции экспорта документов в формат PDF одним нажатием кнопки мыши и поддержку Flash. Знакомый интерфейс легко выучить и использовать, особенно пользователям Microsoft Office. OpenOffice.org позволяет читать, редактировать и сохранять файлы в форматах Microsoft Office.

    Использование OpenOffice.org не требует никаких лицензионных отчислений.OpenOffice.org - это часть проекта OpenOffice.org, ставящая своей целью сделать его более доступным русскоязычному сообществу.

    В рамках этого проекта основное внимание уделяется таким аспектам поддержки русскоязычных пользователей, как:

    Информация на русском языке на web-страницах и в документах.

    Доступные русскоязычные сборки.

    Доступные зеркала и сайты аналогичной тематики.

    Работа над переводом на русский язык.

    Усовершенствование системы проверки правописания.

    Шаблоны и макросы на русском языке

    Популяризация OpenOffice.org среди русскоязычных пользователей.

    Русский проект не заменяет, а дополняет основной проект OpenOffice.org. Поэтому на нашей странице вы найдете много ссылок на оригинальную англоязычную документацию.

    Продукт OpenOffice.org

    OpenOffice.org - это свободный офисный пакет. Обладая собственной историей с 2000 года, OpenOffice.org пользуется заслуженной популярностью, благодаря расширенному функционалу, кроссплатформенностью, богатым возможностям, хорошей совместимостью компонентов и свободной лицензии.

    OpenOffice.org успешно заменит вам любой другой офисный пакет, а открытая лицензия освободит пользователя от всех лицензионных отчислений, связанных с использованием пакета, в настоящем и будущем.

    OpenOffice.org состоит из шести компонентов-программ:

    • Текстовый редактор и редактор web-страниц Writer;
    • Редактор электронных таблиц Calc;
    • Средство создания и демонстрации презентаций Impress;
    • Векторный редактор Draw;
    • Система управления базами данных Base;
    • Редактор для создания и редактирования формул Math.

    Все компоненты интегрированы в общее ядро и, таким образом, обладают хорошей совместимостью друг с другом. Функциональность всех компонентов предоставляет все необходимые средства и позволяет решить основные задачи пользователя. Для хранения результатов работы используется формат файлов ODF (ISO/IEC 26300:2006), основанный на XML и получивший статус международного стандарта.

    Основные особенности OpenOffice.org

    OpenOffice.org обладает рядом интересных особенностей, частично или полностью отсутствующих в других офисных пакетах:

    Кроссплатформенность. В настоящее время OpenOffice.org можно использовать на всех популярных платформах: Linux (на 32- и 64-разрядных системах), Windows (2000 и более поздняя), MacOS, FreeBSD и Solaris.

    Инструменты, облегчающие создание, редактирование и управление документами:

    • Галерея для вставки изображений;
    • Навигатор для перемещения по документу и поиска;
    • Стилист для создания, редактирования и управления стилями форматирования документа;
    • Источники данных для импорта данных из баз данных или электронных таблиц.

    Поддержка форматов MS Office. Вы можете без проблем открывать и сохранять документы в форматах MS Office 97-2003. Также поддерживается импорт файлов в формате Office OpenXML (MS Office 2007).

    Экспорт в PDF. Экспорт в данный формат поддерживается из всех компонентов (кроме Base). При наличии специального расширения возможен также импорт PDF в OpenOffice.org Draw.

    Поддержка расширений. OpenOffice.org предоставляет возможность разрабатывать независимые сторонние расширения, предоставляющее конечному пользователю дополнительную функциональность. Расширения легко устанавливаются и удаляются. Сообществом поддерживается репозитарий расширений OpenOffice.org. Описание некоторых расширений на русском языке можно прочесть в специальном разделе MyOOo.ru или на форуме сообщества.

    Популярность OpenOffice не сильно уступает решению от Microsoft, причем не только благодаря доступности, но и еще потому, что «открытый» исходный код позволяет видоизменять пакет в соответствии с личными предпочтениями. Так, в русском OpenOffice не просто переведены англоязычные термины - программа практически переписана заново.

    Достоинства этого пакета - доступность, качественная локализация, совместимость с популярными форматами и известный интерфейс. Недостаток, по большому счету, один - отсутствие некоторых мелочей, вроде ручного рисования таблиц в текстовом редакторе.


    Основные характеристики распространенных офисных пакетов для Windows

    Название программыВерсия Разработчик Web-сайт Размер дистрибутива Состав пакетаУсловия распространенияMS Office2007 BasicMicrosoftwww.microsoft.com413 Мбайттекстовый процессор MS Word, электронные таблицы MS Excel, мастер презентаций MS PowerPoint, органайзер MS Outlook, СУБД MS Access commercial OpenOffice 3.3 Sun Microsystems www.openoffice.org 156 Мбайттекстовый процессор OpenOffice.org Writer, электронные таблицы OpenOffice.org Calc, редактор формул OpenOffice.org Math, графический редактор OpenOffice.org Draw, мастер презентаций OpenOffice.org Impress, СУБД OpenOffice.org Base freeware

    Приложение 2


    Управление OpenOffice в Delphi

    В основе OpenOffice лежит компонентная модель UNO (Universal Network Objects). Которая обеспечивает возможности для работы OpenOffice на базе различных платформ. Отметим, что рассматривается разработка приложения под ОС Windows, то есть с помощью технологии OLE, которая не поддерживается напрямую OpenOffice. Связано это с тем, что OLE - все-таки Windows технология, а, как было сказано выше, OpenOffice - продукт кроссплатформенный [4].

    Для взаимодействия между OLE и языком OpenOffice используется технология Automation Bridge. Модель UNO, в свою очередь, предоставляет возможность работы со своими компонентами через Service Manager.

    Данная информация дана просто в качестве вводной, подробная информация доступна на сайтах: developers.sun.com; или тут: www.openoffice.org.

    Подключение к серверу автоматизации

    Для начала работы с OpenOffice нужно подключиться к серверу автоматизации. Как это сделать, показано в листинге 1. Отметим, что переменные OO и Document объявлены как Variant.


    Листинг 1TOpenOffice.Connect: boolean;VarIsEmpty(OO) then:= CreateOleObject('com.sun.star.ServiceManager');:= not (VarIsEmpty(OO) or VarIsNull(OO));;


    Комментарии здесь излишни, выделим только, что 'com.sun.star.ServiceManager' и есть программный идентификатор Service Manager'а.

    Отключение от сервера автоматизации

    Рассмотрим теперь функцию Disconnect. Она еще проще (листинг 2).


    Листинг 2TOpenOffice.Disconnect;:= Unassigned;;


    Комментарии излишни. Теперь можно работать с документами, только для начала надо создать или открыть существующий.

    Создание нового документа

    Для создания документа используется функция CreateDocument. Она приведена на листинге 3.


    Листинг 3

    function TOpenOffice.CreateDocument: boolean;: Variant;:= OO.createInstance('com.sun.star.frame.Desktop');:= Desktop.LoadComponentFromURL(

    'private:factory/swriter', '_blank', 0,([0, -1], varVariant));:= not (VarIsEmpty(Document) or VarIsNull(Document));;


    Рассмотрим эту функцию подробнее. Переменная Desktop - ни что иное, как экземпляр OpenOffice. Получив этот экземпляр, мы можем создавать документ. Для этого используется метод LoadComponentFromURL. Первым параметр - имя файла в URL-формате. Здесь можно указать существующий файл (тогда мы откроем уже существующий файл). Хотя файл, заданный нашим параметром тоже существует, только это шаблон пустого файла.

    Сразу отметим, что это файл Writer'а. Для открытия файла, например, Calc, нам надо первым параметром передать: 'private:factory/scalc'. Отличия на этом в открытии файлов разных приложений заканчиваются. Второй параметр означает, что документ создается в новом окне. Третий параметр - флаг вызова. Далее - опции открытия. Рассмотрим их позже.

    Открытие документа

    Теперь функция открытия документа. Сама функция приведена на листинге 4.


    Листинг 4TOpenOffice.OpenDocument(const FileName:string):;: Variant;: Variant;:= OO.CreateInstance('com.sun.star.frame.Desktop');:= VarArrayCreate([0, 0], varVariant);[0] := MakePropertyValue('FilterName',

    'MS Word 97');:= Desktop.LoadComponentFromURL(FileName, '_blank',

    ,VariantArray);:= not (VarIsEmpty(Document) or VarIsNull(Document));;


    Отличия этой функции от предыдущей только в опциях открытия. Для этого мы их помещаем в массив VariantArray. В частности, главное - что мы ставим фильтр на открытие: MS Word 97. То есть мы работаем с файлами MS Office. Отмечу, что для Calc'a мы бы написали MS Excel 97.

    Небольшое отступление. Возникает вопрос: почему мы открываем файлы MS Office? Ответ прост. Пользователь не зависит от ПО, установленного у него на компьютере, ведь легко представить себе ситуацию, когда на одном компьютере установлен OpenOffice, а на другом MS Office. Поэтому работа с файлами одного формата решит проблему взаимодействия пользователей, у которых стоят различные «офисы». Более того, конечный пользователь даже не заметит разницы: оболочки очень похожи, функции выполняются одинаковые. Как мне кажется, это является важным условием при переходе с MS Office на OpenOffice.

    В этой функции используется функция MakePropertyValue. Листинг 5.


    Листинг 5TOpenOffice.MakePropertyValue(PropertyName,:string):variant;: variant;:=.Bridge_GetStruct('com.sun.star.beans.PropertyValue');.Name := PropertyName;.Value := PropertyValue; := Structure;

    end;


    Функция эта вспомогательная, она просто ставить заданное значение в соответствие заданному свойству. И возвращает пару свойство-значение. Выделили мы ее потому, что она будет необходима в ряде других мест.

    Процедуры "Сохранить документ" и "Сохранить как"

    Теперь рассмотрим сохранение документа в формате MS Word (или Excel).

    Процедура сохранения показана на листинге 6.


    Листинг 6TOpenOffice.SaveDocument(const FileName:String);: Variant;: Variant;:= OO.createInstance('com.sun.star.frame.Desktop');:= VarArrayCreate([0, 0], varVariant);[0] :=('FilterName', 'MS Word 97');.StoreToURL(FileName, VariantArray);;


    Как мы видим, разница только в функции StoreToUrl. Опять же отмечу, что для документа Calc мы могли бы написать MS Excel 97.

    Рассмотрим еще одну процедуру SaveAs. Эта процедура просто сохраняет документ под новым именем (листинг 7).


    Листинг 7TOpenOffice.SaveAs(FileName: String);:array[1..2] of integer = (0,1);: Variant;:= VarArrayCreate([0,1], varVariant);[0] :=('FilterName', 'MS Excel 97');[1] := MakePropertyValue('Overwrite', True);.storeToURL('file:///'+FileName, VariantArray);;


    В данном случае мы сохраняем текущий документ под именем FileName, если такой документ уже существует, то мы его перезаписываем (свойство Overwrite = True).

    Закрытие документа

    Следующая процедура - закрытие текущего документа. Она тоже проста и не требует никаких комментариев (листинг 8).


    Листинг 8TOpenOffice.CloseDocument();.Close(True);:=Unassigned;

    end;


    Печать документа

    Последняя процедура в этом разделе - процедура вывода на печать текущего документа (листинг 9).


    Листинг 9TOpenOffice.Print(iNumCopies:integer);Bounds:array[1..2] of integer = (0,0);: Variant;( iNumCopies < 1 ) or ( iNumCopies > 512 ) then:= 1;:= VarArrayCreate(Bounds, varVariant);[0]:= MakePropertyValue('CopyCount',iNumCopies);.print(VariantArray);;


    В данном случае мы передаем на печать необходимое количество копий (iNumCopies). Для меня именно это было критично, хотя есть и другие параметры печати, которые можно задавать точно таким же образом. Например, свойство Pages:string - определяет страницы для печати, формат ввода такой: ' 1-9,11,15-20'; или свойство FileName:string - определяет файл, в который производится печать.

    На этом мы закончим рассмотрение основных функций, необходимых для работы с OpenOffice и перейдем к работе непосредственно с документами.

    Вставка текста в начало документа

    Основными действиями, которые нас интересуют в работе с Writer'ом является возможность вставлять текст, например в начало документа и по метке, плюс возможность задавать форматирование текста. Поскольку работа с метками несколько более сложная, разберемся вначале с первым вариантом. Функция вставки текста приведена в листинге 10.


    Листинг 10

    procedure TOpenOffice.InsertTextWriter(const Text: String);

    var: Variant;: Variant;:= Document.GetText;:= TextPointer.CreateTextCursor;.InsertString(CursorPointer, Text, false);.InsertControlCharacter(CursorPointer, 0, false);;


    Рассмотрим эту процедуру подробнее. Прежде чем начать работу с текстом, нам необходимо получить указатель на текст, как на объект документа. Для чего мы используем TextPointer := Document.GetText. Таким образом, схема взаимодействия будет следующей: ServiceManager -> Desktop -> Document -> TextPointer. После этого нам надо создать курсор, что делается методом CreateTextCursor. Только после этого мы уже можем непосредственно вставить строку в начало документа: TextPointer.InsertString(CursorPointer, Text, false). В качестве параметров для этого метода мы передаем созданный курсор, текст для вставки, а также параметр absorb: boolean. Если этот параметр равен False, то текст будет вставляться последовательно, в этом случае TextPointer будет указывать на весть текст, включая последнюю вставленную строку; если же True - тогда только на последнюю вставленную строку, причем, строка, на которую он указывал раньше будет удалена.

    Метод InsertControlCharacter вставляет символ завершения строки. Второй аргумент ("0") - константа, которая обозначает этот символ (com::sun::star::text::ControlCharacter::PARAGRAPH_BREAK).

    Теперь разберемся с форматированием текста. Чтобы поменять размер шрифта или его цвет, нужно установить соответствующее свойство курсора. Например, для установки 20 шрифта это будет выглядеть так:

    .SetPropertyValue('CharHeight', 20);


    Можно поменять цвет шрифта:

    .SetPropertyValue('CharColor', 500);


    В этом случае в качестве второго параметра передается цвет в формате RGB.

    .SetPropertyValue('CharShadowed', True);


    Можно сделать текст подчеркнутым, курсивным и жирным. Это будет выглядеть так:

    .setPropertyValue('CharPosture',fsItalic);

    CursorPointer.setPropertyValue('CharWeight',fsBold); .setPropertyValue('CharUnderline',fsUnderline);


    В принципе, можно и самому задать степень «жирности» и другие параметры. Ведь fsBold и т.д. есть ни что иное, как константы. Поэтому можно, например ввести вместо fsBold константу 200, текст будет жирными. Советую поэкспериментировать с этим.

    Отмечу, что вновь вставленная строка будет обладать установленными свойствами, если их определить до вставки. И еще пара возможностей для работы с курсором. Можно перейти в начало текста:


    CursorPointer.gotoStart(False).


    В конец текста:


    CursorPointer.gotoEnd(False)..goLeft(short Count, boolean Expand) - передвигаем курсор влево на Count.

    Аналогично goRight(short Count, boolean Expand).


    Можно передвигаться по словам:


    boolean gotoNextWord(boolean Expand);gotoPreviousWord(boolean Expand);gotoEndOfWord(boolean Expand);gotoStartOfWord(boolean Expand);


    Переменная Expand определяет будет ли курсор расширятся при своем передвижении.

    Существует и множество других возможностей работы с курсором, но мы остановимся только на этом необходимом наборе.

    Вставка текста по метке

    Теперь рассмотрим вставку текста по меткам. Вообще, на мой взгляд, именно операции с метками являются самыми важными с точки зрения автоматизации работы на предприятии. Обычно создается типичный шаблон отчета, туда один раз забиваются все метки и все. Дальнейшая работа программ автоматизации каждый раз вставлять новые данне в этот шаблон по меткам. Поэтому отведем работе с метками повышенное внимание. За работу с метками отвечает интерфейс xBookmarksSupplier. В листинге 11 показан пример вставки текста по метке.


    Листинг 11

    procedure TOpenOffice.InsertTextByNameWriter(const Text: String,

    BookmarkName: String );: Variant;: Variant;: Variant;: Variant;: boolean;:=True;:= Document.GetText;:= TextPointer.CreateTextCursor;:=Document.getBookmarks;:=BookmarksSupplier.getByName(BookmarkName).getAnchor;('Такой метки нет');:=False;;(Flag)Bookmark.setString(Text);;


    Как видно, начало этого метода ничем не отличается от предыдущего. Далее идут различия в получении метки. Для этого мы используем метод getBookmarks. Таким образом, мы получаем все метки, которые есть в документе. Далее мы можем найти метку, которая нам нужна. Для этого мы из всех меток выбираем метку с именем BookmarkName: BookmarksSupplier.getByName(BookmarkName). Метод getAnchor возвращает текстовый объект, который относится к этой метке. Если такой метки в документе нет, возвращается сообщение об ошибке. Для отслеживания этой ошибки мы вводим переменную Flag: boolean. Если же метка обнаружена, мы можем вставлять текст с помощью метода setString, вызванного для этой метки. На этом разговор о OpenOffice.Writer будем считать законченным и перейдем к OpenOffice.Calc.


    МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗО

    Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ