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

Тип работы:
Дипломная
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

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

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

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

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

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

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

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

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

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

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

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

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

Махачкала 2012

Содержание

  • Введение

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

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

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

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

  • Глава 2. Управление офисными приложениями в проектах Delphi
    • 2.1. Нестандартные отчёты — кто и зачем этим занимается

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

2.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 см.

Код макроса:

Sub Макрос1()

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

'Selection. WholeStory

Selection. Font. Name = «Times New Roman»

Selection. Font. Size = 10

Selection. ParagraphFormat. Alignment = wdAlignParagraphJustify

With ActiveDocument. Styles (wdStyleNormal). Font

If. NameFarEast =. NameAscii Then

. NameAscii = ««

End If

. NameFarEast = ««

End With

With ActiveDocument. 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 = wdGutterPosLeft

End With

End Sub

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

Чтобы отредактировать сделанный макрос выполните команду Вид => Макросы, откроется окно Макрос и выбираем наш записанный макрос (рис. 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:

Range («A1: G19») -- объект (диапазон ячеек D2: E18);

Select -- метод (выделение).

В команде Selection. Style = «Currency»:

Selection -- объект (выделенное);

Style -- свойство (стиль);

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

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

Редактор Visual Basic

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

Sub Arial10_bold ()

«

" Arial10_bold Macro

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

«

With 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 = wdAnimationNone

End With

End Sub

Наверняка пользователям, незнакомым с программированием, такой текст покажется очень сложным, однако при ближайшем рассмотрении оказывается, что это простой набор параметров, которые установлены или не установлены. Установленный параметр обозначается словом 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.

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

Selection. 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 можно ввести первой строкой макроса, для того, чтобы она перехватывала все ошибки. Метку можно ввести перед той командой макроса, которая должна выполняться после ошибочной команды. Если при обнаружении ошибки следует прекратить выполнения макроса, то метку следует ввести перед строкой завершения работы макроса.

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

Sub Валюты ()

'

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

' Макрос записан 02. 01. 2007 (Spiridonov)

On Error GoTo a

Sheets. Add

ActiveSheet. Name = «Новый»

Sheets («Курсы валют»). Select

Range («A1: G19»). Select

Selection. Copy

Sheets («Новый»). Select

Selection. PasteSpecial Paste: =xlPasteValues

Selection. Replace What: =". «, Replacement: =». «

Range («H2»). Select

ActiveCell. FormulaR1C1 = «=RC[-4]/RC[-6]»

Selection. AutoFill Destination: =Range («H2:H19»)

Range («H2: H19»). Select

Selection. Copy

Range («D2»). Select

Selection. PasteSpecial Paste: =xlPasteValues

Range («A: B, E: H»). Select

Selection. Delete Shift: =xlToLeft

Columns («B: B»). Select

Selection. Style = «Currency»

Range («A: B»). EntireColumn. AutoFit

Range («A1»). Select

ActiveSheet. Name = Date

Границы

a:

End Sub

Sub Границы ()

'

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

' Макрос записан 02. 01. 2007 (Spiridonov)

Range («A1: B19»). Select

Selection. Borders (xlEdgeLeft). LineStyle = xlContinuous

Selection. Borders (xlEdgeTop). LineStyle = xlContinuous

Selection. Borders (xlEdgeBottom). LineStyle = xlContinuous

Selection. Borders (xlEdgeRight). LineStyle = xlContinuous

Selection. Borders (xlInsideVertical). LineStyle = xlContinuous

Selection. Borders (xlInsideHorizontal). LineStyle = xlContinuous

Range («A1»). Select

End Sub

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

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

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

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

Для подписи макроса необходимо получить сертификат.

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

Для личного использования сертификат цифровой подписи можно создать самостоятельно с помощью программы Цифровой сертификат для проектов 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;

var

verr, verr1: string;

i, verrI: integer;

const

DigiChar = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];

begin

try

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

MsWord. Visible := False;

except

error (1, 'Microsoft Word не установлен');

end;

verr := Trim (Version);

verr1 := '';

for i := 1 to Length (verr) do

if not (verr[i] in DigiChar) then

break

else

verr1 := verr1 + verr[i];

verrI := StrToInt (verr1);

if verrI& lt;

9 then

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

end;

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

type

Word = class

public

function Version: string; //shadow

procedure Error (i: integer; str: string); //intro

MsWord: Variant; // Main

end;

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

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

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

procedure Word. Open (fileName: string);

begin

try

MsWord. Documents. Add (fileName, EmptyParam);

except

Error (2, 'файл не найден');

end;

end;

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

procedure Word. Open_Next (fileName: string);

begin

try

MsWord. Selection. InsertFile (FileName := filename, ConfirmConversions: =

false, Link := false);

except

Error (2, 'файл не найден');

end;

end;

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

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

begin

case i of

1:

begin

showmessage (str);

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

Application. Terminate;

end;

2:

begin

showmessage (str);

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

Application. Terminate;

end;

end;

showmessage (str);

Exit;

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);

var

What, Which, Count, Name: OLEVariant;

begin

What := -1;

Which := unAssigned;

Count := unAssigned;

Name := data;

MsWord. Selection. goto (What, Which, Count, Name);

end;

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

procedure Word. insert (info: string; _bold, _italic, _StrikeThrough, _Underline:

boolean; _Size: integer; _center: boolean);

begin

MsWord. Selection. Font. Bold := _bold;

MsWord. Selection. Font. italic := _italic;

MsWord. Selection. Font. StrikeThrough := _StrikeThrough;

MsWord. Selection. Font. Underline := _Underline;

MsWord. Selection. Font. Size := _Size;

if _center = true then

MsWord. Selection. ParagraphFormat. Alignment := 1;

MsWord. selection. TypeText (info);

end;

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

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

procedure Word. NextCell;

begin

MsWord. Run ('NextCell');

end;

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

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

procedure Word. SkipCell (n: integer);

var

i: integer;

begin

if n& lt;

1 then

Exit;

if not NewList then

begin

for i := 1 to n do

MsWord. Run ('NextCell');

end

else if n& gt;

1 then

begin

search ('a1');

for i := 1 to n — 1 do

MsWord. Run ('NextCell')

end

else

begin

search ('a1');

end;

end;

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

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

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

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

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

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

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

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

begin

{Converts a measurement from centimeters to points (1 cm = 28. 35 points).

Returns the converted measurement as a Single.

Syntax

expression. CentimetersToPoints (Centimeters)

expression Optional. An expression that returns an Application object.

Centimeters Required Single. The centimeter value to be converted to points. }

Result := 28. 35 * a;

end;

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

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

procedure Word. Normalize;

begin

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

//MsWord. ActiveDocument. PageSetup. Orientation: =0;// wdOrientPortrait;

MsWord. ActiveDocument. PageSetup. TopMargin := CentimetersToPoints (0. 75);

MsWord. ActiveDocument. PageSetup. BottomMargin := CentimetersToPoints (0. 2);

MsWord. ActiveDocument. PageSetup. LeftMargin := CentimetersToPoints (0. 5);

MsWord. ActiveDocument. PageSetup. RightMargin := CentimetersToPoints (0. 5);

MsWord. ActiveDocument. PageSetup. Gutter := CentimetersToPoints (0);

MsWord. ActiveDocument. PageSetup. HeaderDistance := CentimetersToPoints (1. 27);

MsWord. 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;

var

verr: string;

begin

verr := MsWord. Version;

Result := verr;

end;

Закрыть Word:

procedure Word. Quit;

begin

MsWord. Quit;

end;

Закрыть документ Word:

procedure Word. Close;

begin

MsWord. Documents. Close;

end;

Сохранить активный документ:

procedure Word. Save (Name: string);

begin

MsWord. ActiveDocument. SaveAs (FileName := Name);

end;

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

procedure Word. Print;

begin

MsWord. ActiveDocument. Print;

end;

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

MsWord. 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

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

except

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

if OpenDialog1. Execute then begin

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

Word. Documents. open (OpenDialog1. FileName);

Word. visible:=true;

end;

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

Word. Options. CheckSpellingAsYouType:=false;

Word. Options. CheckGrammarAsYouType:=false;

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

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

document: =Word. ActiveDocument;

i: =1;

n:= document. Characters. count;

while i < n do begin

Document. Characters. item (i). font. color := Random (280 000);

i: =i+1;

end;

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

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

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

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

ПоказатьСвернуть
Заполнить форму текущей работой