Експорт з БД в Word
У статті наведені приклади роботи з- таблицями
- закладками
- колонтитулами
- написами
- шрифтами
- курсором
Не буду заглиблюватися в особливості пізнього та раннього зв'язування, тому що інформації на цю тему вже досить.
Отже, постає завдання експортувати якусь таблицю в Word. Навіть не так, стоїть завдання сформувати складний документ з колонтитулами таблицями заголовками і т.д. і т.п.
Є два чудових способу добувати інформацію про інтерфейс Word.- Для того щоб дізнатися, як щось зробити з Delphi в Word-e треба в Word-е зайти в меню Сервіс / Макрос / Почати запис. Потім зробити в Word-e то, що треба зробити з Delphi і закінчити запис макросу. І нарешті Сервіс / Макрос / Макроси. вибираємо записаний. Змінити і дивимося, як він улаштований. Після цього перводітся синтаксису VBA в синтаксис Delphi здійснюється просто і невимушено.
- Ще одним хорошим інструментом отримання знань є компоненти типу TWordApplication. Кидаємо його на форму, в будь-якому операторі набираємо WordApplication1. натискаємо ctrl + пробіл і уважно читаємо. Сенс доступних функцій і властивостей зазвичай зрозумілий інтуїтивно.
Є, ще один, як мені сказали, найбільш логічний спосіб - довідка VBA, але щось не довелось мені нею користуватися ...
Тепер трохи теорії, видобутої цими шляхами ... У Word є колекція документів
У будь-якої колекції є властивість count - кількість таким чином w1.Documents.count - кількість документів.
Використання змінної типу olevariant (в даному випадку vr) іноді потрібно, іноді немає.
Документ має свої колекції:- букви (characters) Тепер можна отримати доступ до
- таблиці А ось так можна вибрати другу колонку останньої таблиці.
- абзаци
- фігури
Ще є корисні об'єкти selection - обрана область і range - діапазон, а так-же функція select - вибрати. Вибрати можна таблицю, колонку (знову ж W1.ActiveDocument.Tables.Item (W1.ActiveDocument.Tables.Count) .Columns.Item (2) .Select), букву, діапазон, абзац і т.д ...
Причому вихідний документ повинен мати титульну сторінку, на якій пишеться якийсь текст, з другої сторінки йде заголовок, де теж пишеться якийсь текст. Далі існує два шляхи, як це реалізувати.
- Без використання шаблону.
Створюється новий документ, де створюються колонтитули написи і т.д.
Цей шлях використовувати не варто тому на різних комп'ютерах можуть спочатку стояти різні настройки сторінки, шрифтів, абзаців і красиво сформований документ у Вас на комп'ютері може жахливо виглядати на іншому. Можна, звичайно, програмно виставляти всі необхідні настройки, але, по-перше, все не врахуєш, по-друге це - великі гальма і багато коду.
- в об'єкт напис на першій сторінці внести текст
- перейти в кінець документа
- перейти в заголовок
- в об'єкт напис в колонтитулі внести текст
- повернутися на другу сторінку
До речі, крім об'єктів "Напис" можна ще ефективно використовувати закладки. Що-б дізнатися, як з ними працювати, досить записати відповідний макрос, а наприклад, вибрати текст між першою і другою закладками можна так: До речі, якщо хто-небудь знайде гарне рішення без використання змінних OleVariant - відпишіть мені на мило.
Вивести дані з бази в документ можна або використовуючи злиття, або через підрядник. Для злиття код виглядає приблизно так: Людина, що знає основи баз даних легко зможе перетворити цей код під свої потреби змінивши рядок підключення і запит.
Для порядкового виводу я користувався створеної мною процедурою TableExport (DataSet: TDataSet; Title, FlagText: string), яка приведена в прикладі. У неї передаються датасета, заголовок таблиці і текстовий параметр FlagText. Якщо він дорівнює '' то експортується вся таблиця. В іншому випадку, експортуються лише ті записи, у яких значення останнього поля одно FlagText. Це зроблено для того, щоб отримавши вибірку, яка довго обчислювалася, можна було її рознести по декількох таблицях в звіті.
Тема, ширина стовпця і вибрати, чи потрібно відображати поле задаються наступними параметрами поля До речі, в наведеному прикладі, дані спочатку викидаються в Word, а потім однією командою перетворюються в таблицю.
Тепер ще деякі корисні можливості: Якщо Ви працюєте через OleContainer, то не зайвими будуть команди типу які прибирають відповідні менюшки, які зазвичай розлітаються по всій формі.
Якщо працювати через CreateOleObject, то щоб отримати значення констант VisualBasic, які Дельфі взагалі кажучи не розуміє, треба всередині макросу написати MsgBox (нужная_константа). Тоді він покаже її чисельне значення, їх-то в Дельфи і використовувати.
Тепер привожу код всієї програми
Якщо хтось побачить в даній статті свої прийоми, які я тут описав, будь ласка, не ображайтеся. )