Четверг, 02.05.2024, 21:49
Главная Регистрация RSS
Приветствую Вас, Гость
Главная » Delphi и Microsoft Office

При работе с сервером автоматизации OLE создание документа с параметрами по умолчанию выглядит проще, так как в этом случае не надо задавать необязательные параметры: WordApplicationl.Documents.Add; Если приложение Delphi 7 или 6 ориентировано на Microsoft Office 97, то оператор создания нового пустого документа для сервера СОМ может иметь вид:

WordApplicationl.Documents.Add(EmptyParam, EmptyParam); 

При этом в модуль должен быть включен оператор

uses ... Word97;

А если вы хотите в Delphi 7 сделать универсальное приложение с сервером СОМ, то вам надо включить в модуль оператор

uses ... Word97, WordXP;

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

if (StrToInt(Copy(WordApplicationl.Version,0,Pos(' .', 
WordApplicationl.Version)-1))) < 9
then
//для Word 91
(WordApplicationl.Documents as Word97.Documents).
Add(EmptyParam, EmptyParam)
else
//для Word 2000/XP
(WordApplicationl.Documents as WordXP.Documents).
Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);

Пояснения приведенных операторов дано в статье "Организация работы с приложениями Microsoft Office". В последнем операторе операцию asWordXP.Documents можно убрать, так как модуль WordXP указан в операторе uses вторым и, следовательно, используется по умолчанию. Если вы хотите создать документ на основе своего шаблона "C:\MyTemplate\My.dot", то код должен быть следующим (далее, чтобы не повторяться, приведены только варианты для сервера COM Microsoft Office 2000/XP) ... Читать всю статью»

Дата: 05.08.2010 | Комментарии (1)

Начнем с перечисления способов использования программ Microsoft Office в приложениях Delphi:

  1. Вызов функцией ShellExecute программы Microsoft Office, связанной с указанным файлом документа. Недостаток такого подхода заключается в том, что файл к моменту вызова уже должен существовать (впрочем, можно создать документ или его основу в приложении, сохранить в файле с нужным расширением, а затем вызвать ShellExecute). Другой недостаток — невозможность управлять вызванной программой из своего приложения.
  2. Внедрение в свое приложение и связывание документа Microsoft Office с помощью контейнера OLE TOleContainer. Это не очень интересный вариант. Так что далее мы не будем на нем останавливаться.
  3. Связь с программами как с серверами автоматизации OLE. Она позволяет использовать возможности языка программирования Visual Basic соответствующих программ. Определенное преимущество этого похода связано с более простым и непосредственным использованием языков программирования приложений Microsoft Office.
  4. Связь с программами как с серверами СОМ. Она позволяет использовать заложенные в них интерфейсы, что, как и при подходе 3, фактически дает возможность работать с языком программирования Visual Basic соответствующих программ. Только синтаксис такой работы отличается от используемого в автоматизации OLE и в ряде случаев несколько менее удобен.
  5. Использование библиотечных компонентов страницы Servers, являющихся также серверами СОМ. Возможности этого подхода аналогичны указанной в пункте 4 программной организации связи с серверами СОМ. Достоинством является несколько более простое и наглядное взаимодействие, а также некоторые дополнительные возможности. Некоторый недостаток — привязка к пакетам, активным в данный момент в Delphi.
  6. Использование некоторых функций и интерфейсов API Windows, а также некоторых специализированных компонентов из библиотеки Delphi. Примером является применение набора интерфейсов MAPI для почтовых программ или применение почтовых компонентов Indy.

Из перечисленных способов только 1 и 6 могут использоваться и в приложениях VCL Win32, и в приложениях VCL .NET. Остальные способы доступны только в приложениях VCL Win32 в Delphi 2005 и 2006 и в приложениях версий, предшествовавших Delphi 2005. Поскольку далее в основном рассматриваются подходы 3-6, то основной материал категорий ориентирован именно на эти виды приложений.

Дата: 04.08.2010 | Комментарии (1)

Создание нового документа Document и включение его в Documents осуществляется методом Add объекта Documents:

в Word97:

function Add(var Template: OleVariant; 
var NewTemplate: OleVariant): WordDocument;

в Word2000, WordXP:

function Add(var Template: OleVariant; 
var NewTemplate: OleVariant;
var DocumentType: OleVariant;
var Visible: OleVariant): WordDocument;

Первые 2 аргумента этого метода задаются в любой версии Microsoft Office. Первый аргумент Template указывает шаблон, который используется при создании документа. Если этот аргумент не указан то документ создается на основе шаблона Обычный (Normal). Второй аргумент NewTemplate булева типа определяет, открывается ли документ как шаблон (при значении true), или как обычный документ. По умолчанию NewTemplate = false, т.е. отрывается обычный документ.

В Microsoft Office 97 в метод Add передаются только эти 2 аргумента. В Microsoft Office 2000/XP метод Add принимает еще 2 необязательных параметра: DocumentType — тип документа, и Visible — аргумент булева типа, определяющий, должен ли быть виден этот документ. Параметр DocumentType может принимать одно из следующих значений: wdNewBlankDocument — новый пустой документ, wdNewEmailMessage — новое электронное сообщение, wdNewFrameset — новый фрейм, wdNewWebPage — новая веб-страница. По умолчанию принято значение wdNewBlankDocument, так что если оно вас устраивает, можете его не изменять. Параметр Visible определяет, открывается ли документ в видимом окне. По умолчанию true — в видимом.

Метод Add — один из примеров, когда вам надо решать, делается ли приложение, ориентированное на определенную версию Microsoft Office, или вы хотите создать универсальное приложение. Если приложение ориентировано на Microsoft Office 2000/XP, то оператор создания нового пустого документа при работе с сервером СОМ может иметь вид:

WordApplicationl.Documents.Add(EmptyParam, EmptyParam, 
EmptyParam, EmptyParam);

При этом в модуль должен быть включен оператор

uses ... Word2000;

или

uses ... WordXP;
Дата: 31.07.2010 | Комментарии (0)

Разрыв соединения с сервером осуществляется методом Disconnect. Кроме того у таких компонентов СОМ серверов, как Word Application, имеется свойство AutoQuit. Если установить это свойство в true, то при завершении приложения автоматически вызовется метод, завершающий сервер. Это свойство полезно устанавливать в true, если вы работаете с новым экземпляром сервера, который создало ваше приложение, и после завершения приложения не требуется, чтобы пользователь мог продолжать работу с сервером. Тогда можно или установить AutoQuit в true, или при завершении приложения выполнить оператор вида:

WordApplicationl.Disconnect;

Это особенно необходимо, если в процессе работы вашего приложения с сервером пользователь не сделал сервер видимым. Если вы не закроете соединение, то после завершения вашего приложения сервер будет по-прежнему невидим, не будет отображен в полосе задач, но в действительности будет выполняться. И когда пользователь решит закрыть Windows, он неожиданно может увидеть какое-то сообщение вашего сервера — невидимки, например, запрос о сохранении файла. Подведем итоги рассмотренного выше. Пусть вы хотите обеспечить соединение сервера с новым экземпляром Word в момент запуска приложения и обеспечить автоматическое завершение Word при завершении приложения. Если вы реализуете это с помощью компонента-сервера Word, вы должны перенести на форму со страницы библиотеки Servers компонент Word Application. Можете не задавать никаких его свойств, а в обработчик события OnCreate формы поместить операторы:

procedure TForm41.FormCreate(Sender: TObject); 
begin
WordApplicationl.ConnectKind := ckNewInstance;
WordApplicationl.AutoQuit := true;
WordApplicationl.Visible := true; // если надо сделать видимым
end;

Если вы не используете компонент сервера, а создаете объект сервера программно, все это может быть организовано следующим образом:

uses ..., WordXP, OleServer; 
...
var WordApplicationl: TWordApplication;
procedure TForml.FormCreate(Sender: TObject);
begin
WordApplicationl := TWordApplication.Create (self);
WordApplicationl.ConnectKind := ckNewInstance;
WordApplicationl.AutoQuit := true;
WordApplicationl.Visible:=true; // если надо сделать видимым
end;

procedure TForml.FormDestroy(Sender: TObject);
begin
WordApplicationl.Free;
end;

В этом примере в обработчике события формы OnCreate создается объект сервера WordApplicationl. Его свойство ConnectKind задается равным ckNewInstance, что обеспечивает создание нового экземпляра Word, гарантируя неприкосновенность того экземпляра Word, который может быть уже открыт на компьютере и в котором идет работа с каким-то документом. Этот оператор должен быть первым из операторов, обращающихся к свойствам или методам сервера. Дело в том, что первый же такой оператор устанавливает соединение с программой Word. И если в этом операторе не задается требуемое значение ConnectKind, то соединение будет осуществлено при значении ckRunningОrNew, принятом по умолчанию. После этого уже будет поздно задавать иное значение ConnectKind ... Читать всю статью»

Дата: 28.07.2010 | Комментарии (0)

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

  • Если вам надо, чтобы ваше приложение работало с каким-то открытым документом сервера, выполняющимся в момент запуска приложения, следует задать ConnectKind = ckRunninglnstance
  • Если, наоборот, вам надо, чтобы ваше приложение не испортило случайно какой-то документ в уже выполняющемся сервере, следует задать ConnectKind = ckNewInstance
  • Если вам необходимо связаться с удаленным сервером, надо задать ConnectKind = ckNewInstance и установить соответствующее значение RemoteMachineName
  • В остальных случаях, вероятно, целесообразно сохранять заданное по умолчанию значение ckRunningOrNew

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

WordApplicaticnl.Visible := true; 
Дата: 25.07.2010 | Комментарии (0)

Теперь рассмотрим общие приемы работы с объектами серверов на примере сервера Word и Excel. Работа именно с этими серверами наиболее перспективна для приложений Delphi. Возможны 2 варианта использования серверов: перенос на форму со страницы Servers соответствующих компонентов WordApplication и ExcelApplication, или программное создание объектов классов TWordApplication и TExcelApplication. В первом случае вы можете установить некоторые опубликованные свойства серверов во время проектирования. А объект сервера создастся автоматически. Также автоматически в приложение занесутся ссылки на соответствующие модули. Во втором варианте вы должны создавать объект сервера и задавать его свойства программно. Например, для сервера Word программное создание объекта без использования компонента делается следующим образом:

var WordApplicationl: TWordApplication; 
...
WordApplicationl := TWordApplication.Create(self);
... // операторы задания свойств

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

Если вы используете компонент сервера, то можете во время проектирования задать его свойство AutoConnect. Оно определяет, должен ли сервер автоматически загружаться с началом выполнения приложения. Если установить AutoConnect = true, то соединение с сервером произойдет в момент начала выполнения вашего приложения. Если же оставить значение AutoConnect = false, принятое по умолчанию, то соединение с сервером можно установить вызовом метода Connect. Например: ... Читать всю статью»

Дата: 24.07.2010 | Комментарии (0)

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

uses ... Word97; // только в Delphi 5, 6 и 7 
или оператор
uses ... Word2000;
или оператор
uses ... WordXP;

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

При подключении одного из указанных модулей, описывающих сервер, вы можете создать приложение, работающее или с Microsoft Office 97, или с Microsoft Office 2000, или с Microsoft Office XP. Но иногда требуется создать универсальное приложение, которое работало бы с любым офисом. Тогда надо подключить два или три модуля. Например:

uses ... WordXP, Word2000;

Тот модуль, который подключается последним (в данном примере Word2000) будет работать по умолчанию. А на свойства и методы другого модуля надо давать в тексте явные ссылки.

Определить программно, объекты какого именно модуля надо использовать в процессе выполнения, можно воспользовавшись способами определения версии Windows ... Читать всю статью»

Дата: 23.07.2010 | Комментарии (0)

Начиная с Delphi 5, взаимодействие с Word, Excel и многими другими распространенными программами, входящими в стандартную установку Windows и Microsoft Office, может осуществляться из приложений Delphi с помощью компонентов-серверов СОМ, размещенных в библиотеке на странице Servers. Эти компоненты отображают множество импортируемых серверов СОМ. Все они являются потомками своего базового класса TOleServer. В этом классе объявлены абстрактные методы и свойства, позволяющие устанавливать связь с сервером. Поэтому объекты класса TOleServer нельзя создавать непосредственно. В приложениях используются только потомки этого класса — конкретные серверы СОМ.

Компоненты страницы Servers различны для Microsoft Office 97 и Microsoft Office 2000/ XP. Впрочем, можно обойтись и без этих компонентов, просто создавая в своем приложении объекты соответствующих классов. При этом надо учитывать, что, начиная с в Delphi 6, имеется по несколько модулей на каждый класс серверов. Например, для сервера Excel это модули Excel 97 и Excel 2000. Как не трудно догадаться, первый из них относится к Microsoft Office 97, а второй - к Microsoft Office 2000. Аналогично для сервера Word имеются модули Word97 и Word2000. Начиная с Delphi 7, еще добавлены модули для Windows XP: ExcelXP, WordXP и др. Но начиная с Delphi 2005, модули, относящиеся к Microsoft Office 97, исчезли, и остались только модули для Windows 2000 и Windows XP.

Когда вы устанавливаете Delphi, вам задается вопрос, для какой версии Office - 97, 2000 или ХР надо проводить установку. В зависимости от того, какой вариант вы выбрали, страница Servers в палитре компонентов будет отображать компоненты соответствующего пакета. В последующим вы можете при желании в любой момент изменить сделанный выбор.

Сменить активный пакет, определяющий состав страницы библиотеки Servers можно следующим образом. Выполните команду Component | Install Packages, ... Читать всю статью»

Дата: 19.07.2010 | Комментарии (0)

Любой сервер СОМ — это объект, имеющий множество свойств, методов, и реагирующий на какие-то события. В этом отношении он ничем не отличается от любого объекта Delphi. Многие из свойств сервера СОМ в свою очередь являются объектами со своими методами и свойствами. Обращение к свойствам объекта класса TWordApplication, инкапсулирующего объект Application (этот объект является самим выполняющимся экземпляром Word), производится так же, как к свойствам любого объекта Delphi. Например, в Application имеется свойство Options — опции, являющееся в свою очередь объектом со множеством свойств. Среди этих свойств есть CheckSpellingAsYouType и CheckGrammarAsYouType — булевы свойства, указывающие, должен ли Word автоматически проверять синтаксис и грамматику и отмечать в тексте ошибки.

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

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

Тем самым вы отключите автоматические проверки, тем более, что в случае, если Word невидим и работает "за кадром", эти проверки совершенно бессмысленны. Среди множества свойств Application следует отметить свойство ActiveDocument — активный документ. Это объект Document, некоторые свойства и методы которого будут описаны ниже ... Читать всю статью»

Дата: 18.07.2010 | Комментарии (0)

Далее мы рассмотрим основные свойства и методы серверов. Но описать все свойства и методы невозможно — их слишком много. Так что неизбежно возникает вопрос — где найти недостающую информацию? Ответ достаточно простой — всю информацию можно найти в справках по программированию соответствующих программ. Например, для сервера Word можно получить сведения по свойствам и методам, комбинируя сведения, полученные из файлов Word97.pas, Word2000.pas и WordXP.pas со сведениями, почерпнутыми из справки программы Word — раздел «Справка по программированию".

Если у вас нет в Word такого раздела, значит вы не указали соответствующее средство при установке Microsoft Office. Надо повторить установку Microsoft Office, добавив справку по программированию на языке Бейсик. Для сервера Excel сведения по свойствам и методам можно получить, комбинируя сведения, полученные из файлов Excel97.pas, Excel2000.pas и ExcelXP.pas со сведениями, почерпнутыми из справки Excel — раздел «Справка по программированию". Как и для Word, если у вас нет такого раздела в справке Excel, значит вы не указали соответствующее средство при установке Microsoft Office.

Схема получения информации из справки по программированию и соответствующих файлов Delphi может быть примерно такой. Вы смотрите в справке Word или Excel описание ... Читать всю статью»

Дата: 15.07.2010 | Комментарии (0)

С программами Microsoft Office Word, Excel и другими можно работать как с объектами автоматизации OLE. Этот подход существенно отличается от работы с этими программами как с серверами СОМ или от использования компонентов страницы Servers. Работа с объектами автоматизации может быть организована двумя способами: через библиотеки типов и через механизм автоматизации OLE. Использование библиотеки типов имеет то преимущество, что обеспечивает проверку типов. Но для работы с библиотекой типов надо сформировать соответствующий файл и разобраться в нем. Компиляция программ, включающих объект через библиотеку типов, требует заметных затрат времени. По этим причинам мы в дальнейшем этот путь рассматривать не будем. Использование автоматизации OLE применительно к Word и Excel проще, поскольку в эти программы встроена справка по VBA, содержащая описание всех объектов, свойств и методов.

Так что разработчик просто получает возможность работать с ними из приложения Delphi. Основные отличия при использовании автоматизации OLE от работы с серверами СОМ заключаются в следующем. Задание свойств и методов в серверах автоматизации OLE, как будет показано в следующем раздел, намного удобнее.

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

Во-вторых, параметры методов можно задавать в форматах "имя := значение", причем последовательность задания параметров безразлична.

Это дополнительное удобство, так как не требуется помнить последовательность параметров в объявлении метода. К тому же, не требуется переводить все значения параметров в тип OleVariant, обязательный для серверов СОМ. Еще одним преимуществом серверов автоматизации OLE является то, что вызываемые методы очень близки к их описанию в справке по VB соответствующей программы Microsoft Office. В серверах СОМ в некоторых случаях наблюдаются отличия ... Читать всю статью»

Дата: 14.07.2010 | Комментарии (0)