Експорт данних у Microsoft Word

 

Експорт данних у Microsoft Word

 

        Іноді для АРМ буде корисно автоматично формувати текстові данні за поданою схемою (шаблоном), але тоді постає проблема друку данних і їх збереження в доступному (досить уживаному) форматі. Для цього ми і будемо використовувати Microsoft Word. Так як весь пакет Microsoft Office підтримує технологію OLE ми просто будемо передавати данні у Word, а користувач сам буде вирішувати, що з ними робити далі (друкувати, чи зберігати і т.д).

         Встановлення зв’язку з Microsoft Word

         Для цього в системі має бути інстальований офіс, інакше ми отримаємо повідомлення про помилку. В розділі оголошення допоміжних модулів має бути підключений ComObj (Uses Com Obj).

 

procedure TForml.bnTestWordClick(Sender: TObject):

       var

                WordApp, Doc: OleVariant:

begin

       try

                WordApp:= CreatedeObject('Word.Application'):

       except

                ShowMessage(’Помилка завантаження!’);

       exit;

       end:

                WordApp.Visible:=true:

                Doc:=WordApp.Documents.Add;

end;

 

         Даний приклад завантажить Word, якщо в системі він не встановлений видасть помилку. Також після відкриття створить новий документ та покаже Word на екрані. Результат виконання CreateOleObject записується в змінну WordApp, яка нам і надає можливість керування додатком Word. А змінна Doc посилається на створений порожній документ.

         Якщо вікно додатку Word показати в самому початку створення документу користувач буде бачити всі послідовні вставлення та форматування тексту, що в деяких випадках може суттево вплинути на роботу нашої програми так як користувач може випадково чи навмисно змінити позицію курсору, або зовсі закрити Word. Також якщо показати Word самого початку це вплине на швидкість формування документу, так як якщо нам для формування документу потрібно виконати наприклад 50 дій, то після кожної Word буде оновлювати документ тобто витрачати час процесора на непотрібну для нас дію, тому вікно потрібно показувати користувачу вже на самому кінці коли документ є остаточно сформований.

         Вивід тексту

         Для роботи з текстом документа використовується властивість Selection, який є в свою чергу вказівником на виділену або поточну позицію курсору. Для того щоб Word надрукував текст в теперішній позиції курсору викликаємо метод TypeText властивості Selection наприклад:

 

         WordApp.Selection.TypeText('Тестове повідомлення');

 

         Для того щоб закрити документ потрібно використати метод Close для створеного документу. В нашому випадку на створений документ посилається змінна Doc, а отже синтаксис закриття документу буде виглядати наступним чином:

 

         Doc.Close;

 

         Word є багатофункціональним текстовим процесором, тобто він сам переность слова при досягненні поля на інший рядок, але якщо потрібно почати ввід текста з нового рядка (абзацу) нам потрібно мусово перейти на новий рядок. Це можна зробити передавши системі службову послідовність CR\LF. Наприклад:

 

         WordApp.Selection.TypeText ('Перший рядок'+#13+#10);

         WordApp.Selection.TypeText('Другий рядок');

 

         Послыдовність символів #13#10 і є маркером переводу каретки, але в системі є більш правильний метод переходу на новий рядок, а саме службова функція TypeParagraph властивості Selection. Наступний приклад є еквівалентний попередньому, але є логічно більш правильним, все таки яким методом користуватися вирішувати вам обидва правильні.

 

         WordApp.Selection.TypeText ('Перший рядок');

         WordApp.Selecti on.TypeParagraph;

         WordApp.Selection.TypeText('Другий рядок');

 

         Позиціонування каретки

                  При виводі чергового тексту курсор у програмі MS Word зміщається в самий кінець текстового блоку. А що якщо нам потрібно перемістити курсор в іншу позицію, наприклад повернутися назад? Допустимо, ми надрукували повідомлення «це тестове повідомлення», тепер курсор перебуває в кінці слова «повідомлення». Як вставити слово «текствое» після слова «тестове»? Для цього потрібно перемістити курсор на дев'ять символів назад і надрукувати в цій позиції потрібне слово.

         Для переміщення курсору використовується метод Move властивості Selection. У цього методу два параметри: точність руху й кількість кроків. Кількість кроків залежить від точності, але що це таке? Відповідні числові значення і їх опис представлені в таблиці.

         Таким чином, щоб перемістити курсор на п'ять символів, потрібно вказати в якості точності значення 1, а в якості числа кроків — значення 5. Кількість кроків може бути й негативним. Якщо це значення позитивне, то курсор переміщається вправо, якщо негативне — уліво. При цьому майте на увазі, що під час руху курсору відбувається виділення, приблизно так само, як у випадку переміщення курсору за допомогою клавіш зі стрілками в програмі Word при натиснутій клавіші Shift.

 

Таблиця значень точності та переміщення курсору

Точність

Крок

1

Символ

2

Слово

3

Речення

4

Абзац

5

Рядок

9

Стовпець таблиці

10

Рядок таблиці

12

Клітинка таблиці

 

         В слідуючому прикладі вставляємо слово «текстове» перед словом «повідомлення»:

 

         WordApp.Se1ection.TypeText('Це тестове повідомлення');

         WordApp.Selection.Move(-1,12);

         WordApp.Se1ection.TypeText('текстове повідомлення');

 

         Метод Move досить простий. Могутнішими є його варіанти Moveleft і Moveright. Перший із цих методів рухає курсор вліво, другий — вправо.

         В обох методів три параметри:

                  • точність;

                  • кількість кроків;

                  • необхідність виділення.

         Якщо третій параметр рівний true, то текст виділяється, інакше просто рухається курсор. Таким чином, задача вставки слова може бути вирішена в такий спосіб:

 

WordApp.Selection.TypeText('Це тестове повідомлення');

WordApp.Selection.MoveLeft(1, 12, false);

WordApp.Selection.TypeText(’текстве’);

 

         Якщо все-таки необхідно виділити текст третім параметром передаємо True. Для того, щоб зняти виділення викликаємо метод Collapse:

 

         WordApp.Selection.Col1apse;

 

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

 

         // Друкуємо текст

         WordApp.Selection.TypeText(Це тестве повідомлення');

         // Переміщуємо курсор вліво з виділенням

         // Виділеним буде слово "повідомлення"

         WordApp.Selection.MoveLeft(1, 12. true);

         // Знімаємо виділення, курсор буде перед словом "повідомлення"

         WordApp.Selection.Col1apse;

         // Вставляємо слово

         WordApp.Selection.TypeText('текстве ');

 

         Тепер подивимося, як можна піднятися на один рядок вище. Для цього для точності потрібно вказати число 5 (перший параметр методу Move). У наступному прикладі ми піднімаємося на один рядок вгору:

 

         Wordapp.Selection.Move(5, -1);

 

         Шрифт

         Дуже важко читати звіт, у якому увесь текст представлено одним шрифтом. У звіті є як мінімум заголовок, який завжди можна виділити жирним шрифтом.

         Для керування шрифтами використовується властивість Font складноъ властивості Selection. Параметри, які можна змінювати в шрифті, перераховані в таблиці.

Таблиця параметрів шрифта

Назва параметру

Тип

Опис

Name

Рядок

Дозволяє змінити шрифт. Параметру присвоюється ім'я необхідного шрифту

Size

Число

Число, що визначає розмір шрифту

Bold

Булевий

Якщо параметр рівний true, то текст буде друкуватися жирним шрифтом

Italic

Булевий

Якщо параметр рівний true, то текст буде друкуватися курсивом

Strikethrough

Булевий

Якщо параметр рівний true, то текст буде друкуватися перекресленим

Subscript

Булевий

Якщо параметр рівний true, то текст буде друкуватися в нижньому індексі

Superscript

Булевий

Якщо параметр рівний true, то текст буде друкуватися у верхньому індексі

Smallcaps

Булевий

Якщо параметр рівний true, то текст буде друкуватися в нижньому регістрі

Allcaps

Булевий

Якщо параметр рівний true, то текст буде друкуватися в верхньому регістрі

 

         У наступному прикладі текст друкується шрифтом Courier:

 

Wordapp.Selection.Font.Name: ='Courier';

Wordapp.Selection.Typetext('Це тестове повідомлення');

 

         Тепер спробуємо надрукувати в документі число 10 і вказати для нього другий ступінь. Для цього потрібно надрукувати число 10, потім встановити властивість Selection.Font.Superscript в true і надрукувати 2. He забуваємо повернути шрифт у вихідний стан:

 

Wordapp.Selection.Typetext('10');

Wordapp.Selection.Font.Superscript:=true;

Wordapp.Selection.Typetext('2');

Wordapp.Selection.Font.Superscript:=false;

 

         Розміщення тексту

                  Тепер нам потрыбно познайомитися з розміщенням тексту на аркуші. Для цього в MS Word є досить широкі можливості, і всі вони доступні для зміни програмно. Розглянемо основны методи позицыонування тексту.

         Наступні параметри розміщення тексту стосуються властивості Paragraphs:

 

         • Firstlinelndent — відступ для першого рядка абзацу;

         • Leftlndent — відступ ліворуч для всіх рядків абзацу;

         • RightIndent — відступ праворуч для всіх рядків абзацу;

         • Alignment — вирівнювання:

                   0 — по лівому краю;

                   1 — по центру;

                   2 — по правому краю;

                   3 — по ширині аркуша.

 

         За замовчуванням новий рядок рівний 0, тобто в першому рядку немає відступу ліворуч. Змінимо це значення на 20:

 

         Wordapp.Selection.Paragraphs.Firstlinelndent:=20;

 

         У нас вже досить інформації, щоб програмно створити який-небудь документ. У прикладі представлений код створення заяви на звільнення.

 

procedure TForml.Button1Click(Sender: TObject);

            var

                        WordApp, Doc:OleVariant;

begin

            try

                       WordApp:= CreatedeObject('Word.Application');

            except

                       ShowMessage('Помилка зв’’язку з Word') ;

                       exit;

            end;

            WordApp.Visible:=true;

            Doc:=WordApp.Documents.Add;

// Виводимо текст

            WordApp.Selecti on.Font.Size:=12;

            WordApp.Selection.Paragraphs.Alignment:=2;

            WordApp.Selection.TypeText('Директору ТзОВ "Каміння"'+#13+#10);

            WordApp.Selection.TypeText('Іванову І.І.'+#13+#10);

            WordApp.Selection.TypeText('від працівника+#13+#10);

            WordApp.Selection.TypeText('Фленова Михайла'+#13+#10);

            WordApp.Selection.TypeParagraph;

            WordApp.Selection.Paragraphs.Alignment:=1;

            WordApp.Selection.Font.Size:=20;

            WordApp.Selection.Font.Bold:=true;

            WordApp.Selection.TypeText('Заява'+#13+#10);

            WordApp.Selection.TypeParagraph;

            WordApp.Selection.Paragraphs.Alignment:=3;

            WordApp.Selection.Font.Bold:=false;

            WordApp.Selection.Font.Size:=12;

            WordApp.Selection.Paragraphs.FirstLineIndent:=20;

            WordApp.Selection.TypeText('Прошу Вас звільнити мене’+

                                                                      ’за власним бажанням'):

            WordApp.Selection.TypeText(’с такого числа.’+

                                                           ’Я більше не бажаю у вас працювати,'):

            WordApp.Selection.TypeText(’краще я буду мити підлогу. Жарт))'+#13+#10);

            WordApp.Selecti on.TypeParagraph:

            WordApp.Selecti on.Pa ragraphs.FirstLineIndent:=50:

            WordApp.Selection.TypeText('Дата: 1 квітня 2010 р.');

end;

 

            Таблиці

         Робота з таблицями не завжди цікава, але під час формування звітності завжди потрібна. Для створення таблиці використовується конструкція Wordapp.Activedocument.Tables.Add, до якої потрібно передати п'ять параметрів:

 

         • ширину таблиці;

         • кількість рядків;

         • кількість колонок;

         • поведінка таблиці за замовчуванням;

         • параметри заповнення.

 

         Після виконання цього методу курсор переміщається в середину таблиці, і ви можете починати введення даних у першу клітинку. Для переміщення між клітинками потрібно використовувати метод Selection.Moveright із значенням в якості першого параметра (точність) значення 12. Якщо згадати першу таблицю, то точність зі значенням 12 відповідає переміщенням між клітинками.

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

         Якщо перебувати в останній клітинці останнього рядка й виконати переміщення на рядок униз (у якості точності для методу Move указати 5), то ви вийдете з таблиці й опинитеся праворуч від неї. Після цього можна перейти на рядок нижче шляхом переміщення курсору на одну позицію вправо. Цей варіант ми також розглянемо в наступному прикладі.

         Отже, давайте з'ясуємо, як створити й заповнити таблицю. Спеціально доданий заголовок перед таблицею й текст після таблиці, щоб ви знали, як увійти в таблицю і як вийти з неї. Код для створення такого документу:

 

Приклад створення таблиці

Параметр

Опис

Name

Ім’я шрифта

Size

Розмір шрифту

 

Кінець таблиці

 

Сам програмний код:

 

procedure TForml.Button1Click(Sender: TObject);

var

            WordApp, Doc: OleVariant;

begin

            try

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

            except

            ShowMessage('Word не інстальовано');

            exit;

end;

            WordApp.Visible:=true;

            Doc:=WordApp.Documents.Add;

// Виводимо заголовок

            WordApp.Selection.TypeParagraph;

            WordApp.Selection.Paragraphs.Alignment:=1;

            WordApp.Selection.Font.Size:=20;

            WordApp.Selection.Font.Bold:=true;

            WordApp.Selection.TypeText('Приклад створення таблиці'+#13+#10);

// Змінюємо стиль активного абзацу, так як по ньому буде створена таблиця

            WordApp.Selection.Font.Size:=14;

            WordApp.Selection.Paragraphs.Ali gnment:=3;

            WordApp.Selection.Font.Bold:=false;

// Створення таблиці

            WordApp.ActiveDocument.Tables.Add(WordApp.Selection.Range,2,2,1,0);

// Заповнення таблиці

            WordApp.Selection.Font.Bold:=true;

            WordApp.Selection.TypeText('Параметр');

            WordApp.Selection.MoveRight(12,1);

            WordApp.Selection.Font.Bold:=true;

            WordApp.Selection.TypeText('Опис');

            WordApp.Selection.MoveRight(12,1):

            WordApp.Selection.TypeText('Name');

            WordApp.Selection.MoveRight(12,1);

            WordApp.Selection.TypeText('Ім’я шрифта');

            WordApp.Selection.MoveRight(12,1);

            WordApp.Selection.TypeText('Size');

            WordApp.Selection.MoveRight(12.1);

            WordApp.Selection.TypeText('Розмір шрифта');

// Вихід з таблиці

            WordApp.Selection.Move(5, 1);

            WordApp.Selection.Move(1, 1);

            WordApp.Selection.TypeParagraph;

            WordApp.Selection.TypeText('Кінець таблиці'+#13+#10);

end;