Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект_укр.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.07 Mб
Скачать

2. Робота з com-сервером Microsoft Word

Функція, що реалізує механізм доступу до COM-об'єкту, перебуває в модулі Comobj, який повинен бути підключений у коді.

Потім потрібно описати змінну (краще глобальну) для зберігання посилання на сервер у вигляді:

var w:variant;

Після опису змінної можна створити новий об'єкт COM-сервера за допомогою команди:

w:=createoleobject('word.application');

Після виконання цього оператора додаток Word запуститься, але його вікно не відобразиться на екрані монітора. У диспетчері завдань у списку процесів можна побачити, що процес Winword.exe запущений і знаходиться в пам'яті комп'ютера.

Щоб вікно програми стало видимим необхідно встановити наступну властивість:

w.visible:=true;

При формуванні документів властивість Visible краще встановити в значення True тільки для відображення повністю створених документів. Так можна скоротити час створення звітів і підвищити продуктивність роботи додатків.

Запуск або підключення до Word

Ми розглянули приклад створення нового об'єкта для запуску копії Microsoft Word. Однак такий підхід має недолік: якщо Word уже буде запущений користувачем, то виклик функції createoleobject('word.application') запустить нову копію програми, що веде до нераціональної витрати пам'яті комп'ютера. Для вирішення даної проблеми потрібно мати на увазі, що є функція, яка не створює об'єкт, а підключається до вже існуючого:

w:=getactiveoleobject('word.application');

Перед використання COM-сервера Word доцільно виконувати створення об'єкта або підключення до об'єкта залежно від стану програми Word. Правильний підхід при звертанні до Word наступний:

try

    //підключаємося до Word

    w:=getactiveoleobject('word.application');

except

    //якщо підключення не вдалося (Word не запущений)

    //створюємо новий об'єкт, запускаючи Word

    w:=createoleobject('word.application');

end;

Зазначений код за замовчуванням коректно працює тільки при запуску exe файлу програми. При запуску проекту буде видаватися помилка.

Для роботи коду під час запуску проекту потрібно виконати настроювання Delphi: виконайте команду Tools-Debugger Options, на закладці Language Exception зніміть прапорець Stop On Delphi Exception. Зверніть увагу, що залишати дане настроювання виключеним не рекомендується, тому що поле цього Delphi не буде видавати інформативних повідомлень про помилки при невірній роботі програм.

  1. Робота з документами в Microsoft Word

Отже, об'єкт Word завантажений, і в нас є доступ до нього через змінну w:variant. Об'єкт має методи, за допомогою яких можна створювати, відкривати й зберігати документи.

Створення документа

Для створення документа використовують метод:

w.documents.add;

Після виконання цього методу буде створений документ на підставі стандартного шаблону normal.dot.

Викликати методу add можна з аргументом. У цьому випадку створюється документ на основі зазначеного шаблону. Для своїх додатків можна створити додаткові шаблони документів, наприклад шаблон форми платіжного доручення або податкової декларації. Надалі, використовуючи метод add із вказівкою на шаблон, легко створити потрібний документ, заповнюваний інформацією із програми. Використання шаблонів при формуванні нових документів дозволить створювати гнучкі й зручні для користувача додатки в середовищі Delphi.

Приклад. Нехай у теці із програмою є папка шаблонів з ім'ям Shablon, а в ній файл шаблону з ім'ям anketa.dot. Створимо новий документ на основі шаблону.

w.documents.add(extractfilepath(application.exename)+'shablon\anketa.dot');

Збереження документа

Можна програмно зберегти створений документ на диск. Для цього використовується метод виду:

w.activedocument.saveas( filename:='ім'я файлу'[, fileformat:=число][, password:='пароль']);

Метод має аргументи:

  • filename – ім'я файлу;

  • fileformat – формат збереження файлу (0 – документ Word, 1 – шаблон Word, 2 – тільки текст, 4 – текст DOS, 6 – текст RTF, 7 – кодований текст);

  • password – пароль на відкриття файлу.

  • filename – ім'я файлу;

  • format – формат збереження файлу (0 – автовибір, 1- документ Word, 2 – шаблон Word, 3 – текст RTF, 4 – звичайний текст, 5 – кодований текст);

  • passworddocument – пароль на відкриття файлу.

Наприклад: відкриємо збережений раніше файл:

w.documents.open(filename:=extractfilepath(application.exename)+'output\отчет.doc',fileformat:=1);

Якщо файл має пароль, то його можна відкрити так:

w.documents.open(filename:=extractfilepath(application.exename)+'output\отчет.doc',format:=1, passworddocument:=’123456’);

Закриття документа й додатка Word

Якщо документ збережений, то його можна закрити за допомогою методу:

w.activedocument.close;

Після закриття документа можна закрити й сам додаток Word. Для цього використовують два оператори:

w.quit;

w:=unassigned;

Використовуючи методи роботи з документами можна організовувати фонове створення файлів без відображення їх на екрані.

Приклад. На підставі шаблону anketa.dot з теки shablon створити новий документ. Зберегти документ під ім'ям отчет.doc у теку output. Після збереження видати повідомлення про успішне створення файлу й запросити користувача відкрити файл для перегляду. Якщо відповідь позитивна, то файл відкривається, якщо негативний, то Word закривається.

//створюємо об'єкт (запускаємо Word)

w:=createoleobject('word.application');

//створюємо новий документ на основі шаблону

w.documents.add(extractfilepath(application.Exename)+

'shablon\anketa.dot');

//зберігаємо документ у зазначений файл у форматі doc

w.activedocument.saveas(extractfilepath(application.Exename)+

'output\отчет.doc',fileformat:=1);

//видаємо запит на відкриття збереженого файлу

if application.messagebox(Файл збережений. Відкрити?','Запит',

mb_yesno+mb_iconquestion)=idyes then

    //якщо відповідь Так, робимо Word видимим

    w.visible:=true

else

//якщо відповідь Ні, закриваємо документ і Word

begin

    w.activedocument.close;

    w.quit;

    w:=unassigned;

end;

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]