Технология слияния Delphi и Word
1. Значение кода VBA
Microsoft Word — это интегрированная среда и система обработки текста корпорации Microsoft в США. Однако это ни в коем случае не просто система обработки текста. Она интегрирует Microsoft Visual Basic и может расширять функции Word посредством программирования.
Код Microsoft Visual Basic в Word представляет собой макрос Word. Написав макросы Word, можно реализовать автоматизацию некоторых процессов обработки документов, например автоматическое резервное копирование и сохранение документов и т. д., что позволяет расширить функции документов Word. Таким образом, вы можете в полной мере использовать возможности Word и даже сделать Word частью собственного программного обеспечения.
Макросы Word имеют некоторые преимущества, поскольку они могут помочь нам автоматизировать документы, но макросы Word не являются чисто полезными. Иногда они могут нанести вред нашим документам, компьютерным системам и даже сетям, начиная с макровируса Тайвань NO1. Нынешний макровирус Melissa ушел из жизни. простое приглашение в начале исчерпать системные ресурсы для отправки случайных писем, отправки личной информации в сеть и даже в Autoexec.bat (автоматический командный файл) на жестком диске. Добавьте Deltree C: -y, уничтожает всю систему Windows.
2. Технология Com, встроенная в Word
Можно сказать, что Word — это программное обеспечение с лучшей поддержкой технологии COM. Сказать это может показаться слишком категоричным, но мощная технология программного интерфейса, предоставляемая Word, позволяет нам управлять любой частью Word с помощью программ. Будь то открытие, сохранение, печать или автоматическое рисование таблиц в документах.
С помощью программного обеспечения вы можете гибко манипулировать словом. Здесь мы возьмем только Borland Delphi в качестве примера для подробного описания:
1. Как вызвать программу/файлы Word в Delphi
Существует три способа вызова программного обеспечения Word в Word:
. Встраивание Word через элемент управления Delphi TOleContainer
а. Используйте элемент управления «Серверы», предоставляемый Delphi, для вызова Word и использования свойств Word.
б. С помощью настоящей технологии Com импортируйте все библиотеки классов из файла MSWORD9.OLB в каталоге программного обеспечения Office в Delphi и используйте технологию Com для программирования.
в. Используйте CreateOleObject для запуска Word, а затем управляйте Word в режиме Ole.
2. Оценка сложности нескольких методов.
а. Встраивание Word через элемент управления Delphi TOleContainer.
Это простейшее внедрение Ole, которое позволяет напрямую вызывать документ Word. Вам нужно всего лишь использовать ToleContainer.Run для непосредственного запуска документа Word. И запущенный таким образом документ Word интегрирован с программой Delphi (с точки зрения интерфейса), но имеет непреодолимый недостаток, то есть документ Word не может управляться через Delphi, и цель гибкого манипулирования Word не может быть достигнута. быть достигнуто.
б. Используйте элемент управления «Серверы», предоставляемый Delphi, для вызова Word и использования свойств Word.
Используйте элемент управления «Серверы» Delphi для управления Word. Delphi может реализовать подсказки кода во время программирования. Вообще говоря, он может лучше реализовать контроль над Word со стороны Delphi. Однако некоторые функции Word все еще не могут быть вызваны в Delphi (например, VBA, написанные вами). ). макрокод). А если функция изначально необязательна в коде VBA, параметры необходимо добавлять при вызове Delphi, иначе даже компиляция не пройдет. Запускаемые таким образом программы Word и Delphi относятся соответственно к двум формам. Этот метод можно использовать только как справочный.
c Используйте реальную технологию Com для импорта всех библиотек классов из файла MSWORD9.OLB в каталоге программного обеспечения Office в Delphi, используйте технологию Com для программирования, используйте реальную технологию Com для импорта библиотеки классов файлов MsWord9.OLD, а затем используйте Com. технология для использования программы. В целом это похоже на использование элемента управления «Серверы» в Delphi. Он немного сложнее, чем элемент управления «Серверы». Преимущества и недостатки такие же, как и у элемента управления «Серверы».
d. Используйте CreateOleObject, чтобы запустить Word, а затем управлять Word в режиме Ole.
Этот метод заключается в использовании метода CreateOleObjects для вызова Word, который на самом деле является Ole, но этот метод действительно может полностью контролировать файл Word и использовать все свойства Word, включая код макроса VBA, написанный вами.
По сравнению с управлением серверами и технологией COM этот метод действительно может использовать различные свойства Word. По сути, это то же самое, что и написание собственного кода на VBA, и нет необходимости использовать код по умолчанию. Запускаемые таким образом программы Word и Delphi относятся соответственно к двум формам. Недостаток заключается в том, что при использовании этого метода нет подсказки кода Delphi. Всю обработку исключений необходимо писать самостоятельно, и при написании может потребоваться больше дополнительных знаний.
3. Редактор макросов Word
Word действительно может редактировать код VBA и писать формы и функции.
Как войти в редактор макросов Word: Инструменты->Макросы->Редактор Visual Basic, чтобы войти в интерфейс редактора Visual Basic. Интерфейс редактора Visual Basic в Word в основном такой же, как и в реальном редакторе Visual Basic, и здесь не будет подробно описываться. В код VBA вы можете добавлять пользовательские формы, модули и модули классов. Понятия пользовательских форм, модулей и модулей классов точно такие же, как в Visual Basic. Комментарии также точно такие же, как и в Visual Basic.
Вы можете поместить курсор на любую подпрограмму формы или модуля и напрямую нажать «F5», чтобы запустить текущую подпрограмму.
4. Обзор макросов Word
Word полностью сочетает в себе редактирование документов и VB для полной автоматизации документов. Программирование с использованием Word похоже на использование Visual Basic. Разница в том, что в Word вы можете напрямую запустить определенную подпрограмму и напрямую увидеть результаты. Макросы Word можно только интерпретировать и запускать, тогда как Visual Basic теперь можно записывать в реальные программы. С точки зрения защиты кода количество кодов VBA в Word должно быть максимально сокращено, особенно кодов клавиш.
Макросы VBA можно разделить на четыре типа:
1. Макрос с тем же именем, что и у команды.
Такие как FileSave, FileOpen, если код VBA содержит функции с тем же именем, что и Word, эти коды VBA будут выполняться напрямую, игнорируя команды самого Word.
2. Специальные макросы в Word
Эти макросы включают AutoExec (запуск Word или загрузка глобальных шаблонов), AutoNew (каждый раз при создании нового документа), AutoOpen (каждый раз при открытии существующего документа), AutoClose (каждый раз при закрытии документа), AutoExit (закрытие Word или выгрузка глобальных шаблонов) час).
Если код VBA содержит функции с такими именами, соответствующий код будет выполнен автоматически при выполнении соответствующих условий.
3. Макрос VBA для соответствующих событий.
Эти макросы представляют собой макросы, запускаемые событиями. Например, Document_Close запускает событие при закрытии документа, Document_New — при создании нового документа, а Document_Open — при открытии документа.
4. Независимый макрос
Код VBA, который вы пишете самостоятельно, то есть код VBA, который не попадает в вышеописанные ситуации, может вызываться другими кодами VBA и, что более важно, может вызываться другими программами.
Таким образом, мы можем отказаться от макросов, автоматически выполняемых Word, и напрямую вызывать соответствующие макросы через Delphi для достижения цели.
[b]5 Подробное описание макросов команд Word[/b]
Сам Word содержит множество командных функций, но ни онлайн-справка Word, ни справка MSDN не дают никакого представления об этом аспекте, поэтому вы можете исследовать его только посредством собственных экспериментов. Первоначально изучались следующие функции:
Комментарии к объяснению имени макроса
ФайлНовый Новый
FileNewDefault создает новый пустой документ.
FileSaveAs Сохранить как
ФайлОткрыть открыть
ФайлЗакрытьЗакрыть
Печать FilePRint
FilePrintPreview предварительный просмотр печати
ИнструментыНастройка Настройка на панели инструментов
ИнструментыПараметры Параметры инструмента
ToolsRevisions Выделить версии
ToolsReviewRevisions Принятие или отклонение изменений
ToolsRevisionMarksAccept Принять изменения
ToolsRevisionMarksReject Отклонить редакцию
ToolsRevisionMarksToggle Revisions
ИнструментыМакрос макрос
ToolsRecordMacroToggle Запись нового макроса
ПосмотретьБезопасность
ViewVBCode Просмотр среды редактора VB
Шаблоны и дополнения FileTemplates
ToolsProtectUnprotectDocument Снимает защиту с документа.
Вставить гиперссылку Вставить гиперссылку
Редактировать гиперссылку Редактировать гиперссылку
Удалить гиперссылку Удалить гиперссылку
EditLinks Просмотр и удаление ссылок
EditPasteAsHyperlink Вставить гиперссылку
Стиль ФорматСтиль
Закладка EditBookMark
Некоторые коды, используемые в OleWord
1. Программа Delphi запускает Word.
Используйте метод CreateOleObjects для запуска Word и вызова кода VBA. Конкретный процесс реализации:
Сначала используйте GetActiveOleObject('Word.application'), чтобы определить, есть ли программа Word в текущей памяти. Если она существует, подключитесь напрямую. Если программа Word отсутствует, используйте CreateOleObject('Word.Application') для запуска Word.
2. Программа Delphi для создания нового документа Word.
Формат: WordDocuments.Add(Шаблон,NewTemplate,DocumentType,Visible)
Шаблон: имя используемого шаблона,
NewTemplate: тип нового документа, True представляет шаблон, False представляет документ.
DocumentType: тип документа, по умолчанию — пустой документ.
Видимость: видно ли восстановленное окно.
Пример: Doc_Handle:=Word_Ole.Documents.Add(Template:='C:/Temlate.dot',NewTemplate:=False);
3. Программа Delphi открывает документ Word.
Формат: WordDocuments.Open(FileName,ConfirmConversions,ReadOnly,PassWordDocument,
PasswordTemplate, Revent, WritePasswordDocument, WritePassWordTemplate,
Формат,Кодировка,Видимый)
FileName: имя документа (включая путь).
Confirmconversions: отображать ли диалоговое окно преобразования файлов.
ReadOnly: открывать ли документ в режиме только для чтения.
AddToRecentFiles: добавлять ли файлы в список недавно использованных файлов в нижней части меню «Файл».
PassWordDocument: пароль, необходимый для открытия этого документа.
PasswordTemplate: пароль, необходимый для открытия этого шаблона.
Вернуть: если документ уже существует, следует ли открыть его повторно.
WritePasswordDocument: пароль, необходимый для сохранения изменений в документе.
WritePasswordTemplate: сохраняет пароль, необходимый для внесения изменений в шаблон.
Формат: конвертер файлов, необходимый для открытия документа.
Кодировка: используемая кодовая страница документа.
Видимый: видно ли окно, открывающее документ.
Пример:
Doc_Handle:=Word_Ole.Documents.open(FileName:=Doc_File,ReadOnly:=False,
AddToRecentFiles:=False);
4. Программа Delphi для сохранения документа Word
Формат: WordDocuments.SaveAs(имя_файла, формат_файла, LockComments, пароль,
AddToRecentFiles, WritePassword, ReadOnlyRecommended,
ВстроитьTrueTypeFonts, SaveNativePictureFormat, SaveFormsData,
Сохранить как AOCELetter)
ИмяФайла: Имя файла. По умолчанию используется текущая папка и имя файла.
FileFormat Формат, в котором сохраняется документ.
LockComments Если True, в этом документе разрешены только комментарии.
Пароль Пароль при открытии документа.
AddToRecentFiles Если True, документ добавляется в список недавно использованных документов в меню «Файл».
WritePassword Сохраняет пароль, необходимый для внесения изменений в документ.
ReadOnlyRecommended Если значение True, Word будет рекомендовать режим только для чтения при каждом открытии документа.
EmbedTrueTypeFonts Если True, сохраните документ со шрифтами TrueType.
SaveNativePictureFormat Если True, для графики, импортированной с других системных платформ (например, Macintosh), сохраняются только версии Windows.
SaveFormsData Если True, данные, введенные пользователем в форму, сохраняются как запись данных.
SaveAsAOCELetter Если документ содержит вложение и это свойство имеет значение True, сохраните документ как письмо AOCEL (и сохраните электронное письмо).
Пример:
Word_Ole.Documents.SaveAs(FileName:=Doc_File,FileFormat=wdFormatDocument,
AddToRecentFiles=False);
5. Считайте файлы из базы данных на локальный жесткий диск и прочитайте файлы с локального жесткого диска в базу данных.
Используйте двоичное поле изображения для сохранения в базе данных и используйте метод Stream.
Создайте файловый поток:
Word_FileStream:=TFileStream.Create(Target_Name,fmOpenWrite или fmCreate);
Word_FileStream.Position:=0;
Поле изображения сохранено в базе данных:
TBlobField(AdoQuery1.FieldByName(Имя_столбца)).SaveToStream(Word_FileStream);
Чтение файлов из базы данных на локальный жесткий диск:
TBlobField(ADOQuery1.FieldByName(Имя_столбца)).loadfromStream(Word_FileStream);
Освободите файловый поток:
Word_FileStream.Free;
6. Определение глобального сообщения
Поскольку программы Word и Delphi представляют собой два программного обеспечения, взаимодействовать друг с другом затруднительно, поэтому используется метод глобального сообщения. Глобальные сообщения должны быть зарегистрированы первыми, и Windows возвращает номер сообщения о бездействии системы. Если зарегистрированные сообщения одинаковы, система Windows возвращает одно и то же значение, гарантируя, что этот номер сообщения используется для связи между двумя программами.
Как определить сообщение:
szMessageString: pchar = 'XIDIAN_11_Stone';
FMyJoinMessage:= RegisterWindowMessage(szMessageString);
Как отправить сообщение:
SendMessage (дескриптор другой стороны, сообщение, сообщение поставляется с короткими переменными, сообщение поставляется с длинными переменными)
7. Как программа Delphi получает сообщения
Delphi получает два типа сообщений: один — для перегрузки определенного сообщения, а другой — для перегрузки функции WndProc и выбора соответствующего сообщения для обработки.
Метод 1 может обрабатывать только одно сообщение за раз, а метод 2 может обрабатывать несколько сообщений одновременно.
Для второго метода утверждение выглядит следующим образом:
процедура WndProc(var Сообщение: Tmessage);переопределить
Надо отметить, что при его использовании необходимо наследовать функцию WndProc(Message) после обработки собственного сообщения, иначе система выйдет из строя!
8. Динамическое создание диалогового окна «Комбо» и события «Изменить» в Word.
Создайте модуль класса Combohander и определите события внутри него.
Публичное событие WithEvents ComboBoxEvent как Office.CommandBarComboBox
Модуль, определяющий события, генерируемые элементом управления Combo.
Dim ctlComboBoxHandler как новый ComboBoxHandler
Диалоговое окно «Создать комбинацию»
Установите Cbo_ChooseDoc = CommandBars("Добавленное меню").Controls.Add(Type:=msoControlComboBox, Temporary:=True)
Установите дескриптор файла для генерации события Combo_Change.
Установите ctlComboBoxHandler.ComboBoxEvent = Cbo_ChooseDoc
После создания события выберите событие «Изменить» ComboBoxEvent в модуле класса Combohander, чтобы записать код события.
Sub ComboBoxEvent_Change (ByVal Ctrl As Office.CommandBarComboBox)
9. Некоторые события Word
События Word, обрабатываемые в коде VBA: Document_Close.
В событии приложения необходимо обработать: DocumentBeforeClose, DocumentChange.
Document_Close: событие генерирует событие при закрытии документа.
DocumentBeforeClose: перед закрытием документа Word определяет, сохранен ли документ, выдает соответствующие подсказки и выполняет соответствующую обработку.
DocumentChange: переключение документов. События генерируются при переключении документа между документом, измененным вами, и документом, измененным другими. В основном это касается установки разрешений для документов и т. д.