Создание отчета в word delphi
Данная статья написана на базе реальной программы "Автоматизация производства" - автоматической генерации сопровождающей документации при разработке печатных плат на программных продуктах "P-CAD 2000/2001".
- Перечень элементов
- Спецификация
- Ведомость комплектации
На каждом предприятии, будь то малый бизнес и огромный завод, немалую роль играет составление документации и отчётов. Почти всегда этим занимается специально выделенный человек. Так заведено уже давно, но теперь всё чаще появляются инициативные руководители, стремящиеся свести эти горы однотипной рутинной работы с человека на машину. Для этого и используют программы автоматизации производства. Эти программы автоматически генерируют требуемую документацию. Зачастую это сводится к работе с базами данных и библиотеками. Есть много программ делающих это. Но типов таковой документации столь много, что современные программные монстры, такие как пользовательская программа (MS ACCESS) или программируемый монстр (ORACLE) не в состоянии обеспечить даже половины нужд. Ведь у каждого предприятия своя с годами сложившаяся традиция заполнения документации или свой "Норма контроль" с заданными обязательными параметрами. Универсальной программы такого сорта нет и быть не может. Поскольку специфика работы предприятия может быть как гибкой в области документации (коммерческий ларёк), так и строго установленной на мировом уровне (банк или производственная сфера). Для решения этих проблем используют нестандартные отчёты. Отчёты сделанные специально под требования, наложенные на их оформления. Вы только представьте, ту работу, которую сотрудник выполнял несколько месяцев, программа сделает за пару минут. И это вполне реально. Данная статья представляет собой набор советов и примеров, которые помогут разработчику разобраться в столь оставленной без внимания теме, как автоматизация производства. Поскольку документации по этой теме практически нет, то данная статья поможет резко уменьшить время разработки таких программ с месяцев до недель. Но хотя по предлагаемой информации уже были созданы описанные выше программы, этой информации может всё равно оказаться недостаточно. В конце статьи вы найдёте координаты связи для пополнения содержательной части статьи и вопросов. Иллюстрирующие примеры мы приводим на языке Delphi 32 (версии 5 и выше). Выбор был остановлен на Делфи в виду её простоты и наглядности, но все идеи и реализации, изложенные в статье, легко переносятся на любой другой обьектно ориентированный язык программирования высокого уровня.
Нестандартные отчёты - кто и зачем этим занимается
На вопрос "зачем" мы, думаю, дали уже достаточно аргументации. Но всё-таки это не всё, остановимся на ещё неописанных проблемах.
Первый вопрос, который нам обычно задают - это где я смогу это использовать кроме как на предприятии, сфера применимости данной тематики довольно широка, рассмотрим некоторые вопросы и варианты их решения по средствам работы с Ворд и созданием отчётов:
- Удобство интерфейса. Вы можете предоставлять пользователю информацию прямо через WORD, где он сможет либо распечатать её, либо внести необходимые корректировки или сохранить себе копию. Согласитесь, чтобы реализовать это как-либо иначе уйдёт слишком много времени, а интерфейс WORD интуитивен, знаком и понятен, так что ряд проблем просто отпадает.
- Вы можете пользоваться любыми средствами, какими располагает Ворд. В том числе проигрывать видео и аудио записи, выдавать изображения, кроме того, становятся доступны любые возможности конвертации файлов (Например, можно не используя тегов через Ворд создать документ HTML)
- Реальностью становится программа, анализирующая документы формата WORD на диске и создание библиотеки вида название документа = имя файла, причём всю информацию можно напрямую собирать из WORD документов.
- Можно реализовывать локальные операции, допустим, все файлы WORD перевести в DOSовские TXT файлы. И многое, многое другое.
А на счёт кто же этим занимается? Эта информация может быть полезна руководителям. Любой WINDOWS программист с высшим или средне специальным образованием, знакомый с ЯВУ и ООП. Такого вида программистов часто называют прикладными. Срок изготовления в среднем 2-3 месяца с учётом бета тестирования.
Основы работы с OLE
На программном уровне работа с WORD заключается в использовании OLE. Основная структура взаимодействия такова: Существует программа СЕРВЕР, которая считается главной и именно она выполняет все операции, в нашем случае сервером является программа WORD. Из этих слов уже ясно, что если WORD не установлен на компьютере, то есть сервер отсутствует, то ничего выполнено быть не может. Просто некому будет выполнять. Это, по сути, наиболее распространенный вопрос среди программистов среднего класса. Вторая взаимодействующая программа - это программа КЛИЕНТ, все, что она делает - это связывается с сервером и просит его выполнить необходимые операции, сама по себе она ничего не может. В результате такого взаимодействия и решается поставленная задача. Теперь рассмотрим реализацию:
Эта процедура связывает переменную MsWord с Ole, в результате чего подгружается сам WORD, далее мы делаем его пока невидимым и проверяем версию, пояснения процедуры проверки версии будут позже.
Главный класс, в котором описаны основные переменные и процедуры необходимые для корректной работы с WORD.
Следует помнить и совершать все необходимые проверки совместимости сразу, чтобы избежать некорректной работы впоследствии. В случае отсутствия Ворд или несоответствия версии необходимо сразу предупредить об этом пользователя для принятия необходимых мер.
Ошибки при вызове WORD
Для начала опишем процедуру загрузки в WORD DOC файла, делается это так:
Можно к уже открытому добавить ещё один, так чтобы в итоге из двух получить один.
A вот и процедура, которая наиболее часто используется в приложениях такого типа!
- Если установить Ворд и попытаться сразу связаться с ним через Ole, то ничего не получится, дело в том, что при первом запуске WORD программа предлагает напечатать тестовую страницу, при этом, никак не сообщив об этом Ole клиенту. Из-за чего в работе вашей программы может происходить сбой. И исправлению эта ошибка не подлежит, данная неприятность - дело рук компании MICROSOFT создавшей WORD и пока она эту проблему решать не собирается, как видно из WORD XP.
- Ещё может быть ситуация, когда открываемый WORD файл уже занят другим приложением, или копией вашего, тогда ворд предлагает использовать режим только для чтения, а по освобождению ресурса предлагает переход в возможность редактирования. Это тоже влияет на работу клиентской программы, поскольку требует от пользователя согласия на изменение режимов.
- Файл, который вы открываете, просто не существует. Эту проблему вам придётся решать средствами языка разработки. WORD подобные сервисы не предоставляет.
- На используемой машине не хватает памяти. Ответ на этот вопрос смотрите в пункте 3.
Создание отчётов в WORD (различные подходы)
- Это стандартный подход. Клиент делает запрос, сервер выполняет, клиент делает следующий запрос и так далее, пока задача не будет решена.
- Можно использовать встроенный в WORD язык VBA, написать необходимые макросы на Visual Basic Script и внедрить их в текущий документ, тогда останется только вызывать их и всё. За счёт этого можно реально выиграть во времени, но волею случая этот метод в основном используется в компьютерных вирусах, за счёт чего относится к вирусным технологиям и из-за этого некоторые антивирусы могут определять вашу программу как инфицированную WORD вирусом. Поэтому данный метод так и не получил распространения среди Ole программ.
- Третий метод - самый важный, а заключается он в сочетании первых двух, таким образом, демонстрируя взаимное дополнение подходов.
Для воплощения любого из 3-х подходов необходимы ещё дополнительные действия. Если требуется записывать/читать с определённой позиции в тексте или необходимо работать с таблицей, то надо расставить закладки в нужных позициях документа. Это лучше всего сделать в шаблонном документе вручную. Потом надо будет найти эти закладки в тексте и перейти к ним. Для начала, напишем процедуру поиска закладки и перехода к ней.
Теперь закладку мы нашли запишем в то место что-нибудь
Великолепно, кроме простой записи, мы получили, и доступ к конфигурации текста и можем писать текст с атрибутами жирный , курсив , зачёркнутый , подчёркнутый , указывать размер шрифта и даже отслеживать центровку, поверите мне - этого более чем достаточно для реализации программ любой степени сложности!
Теперь напишем процедуру перехода к следующей ячейке таблицы, считаем, что на первую мы перешли по закладке!
Таким же образом запускаются макросы WORD, только вместо NextCell надо вставить имя макроса который хотим запустить. Важно не забывать, что через Ole можно вызывать только "свободные макросы" то есть без параметров. (VIRUS TECHNOLOGIES NOT FOR GAME)
А вот ещё процедура. Она позволяет пропускать нужное число ячеек таблицы с учётом, что позиционирования на закладке ещё возможно не было.
- NewList - переменная булевского типа, отвечающая за начало нового листа и новой таблицы на нём.
- a1 - закладка на первую ячейку таблицы.
Есть ещё команда по работе с закладками. Это удаление.
Данная команда удаляет первую закладку. Это очень удобно для многостраничного документа. Ведь каждая страница содержит одинаковые закладки, поэтому, прежде чем загрузить новую страницу необходимо удалить старые закладки, иначе закладки не загрузятся.
Полезная процедура для всех типов подходов к ole программированию. Она пересчитывает сантиметры в пиксели.
Предварительная настройка страницы WORD
Одной из самых распространенных проблем работы с Ole WORD - различные настройки конфигурации у разных версий WORD и на разных машинах, Вследствие чего иногда документ воспроизводится некорректно. Эту проблему можно решить, задав параметры конфигурации страницы вручную. Среди таких настроек отдельно можно выделить возможности корректировки отступов справа, слева, сверху и снизу, а также ряд других параметров.
Как вы видите, ряд настроек закомментирован, и это не случайность. Поскольку каждое обращение к серверу занимает время, то слишком объемное конфигурирование системы может привести к тому, что пользователь подумает, что программа, должно быть, зависла и перезагрузится, не дав выполнить всё конфигурирование целиком. Поэтому я советую ввести эту возможность как полезную утилиту программы, типа: Full Correction
Вообще-то всего описанного выше вполне достаточно для работы, но есть такое понятие, как "подвязать бантики и шнурочки" и именно это мы и сделаем.
Создание отчета в Word
Здравствуйте. Заранее спасибо. У меня такой вопрос, имеется база данных в Delphi, при нажатии.
Создание отчета и его выгрузка в Excel, Word
Здравствуйте! Есть база данных в access и она соединена с делфи, мне нужно в делфи сделать отчеты.
Вывод отчета в Word
Не получается реализовать вывод отчет По таблице "прием", нужен отчет, но, к сожалению.
Вывод отчета через word
Здравствуйте, возникла такая проблема. я делаю вывод отчетов через word, нужно сделать.
Решение
Вот пример. Отчёт в MS Word на основе таблицы country.db из базы DBDEMOS. БД DBDEMOS поставляется вместе с BDE.Mawrat, огромнейшее спасибо! Очень помогло, но только маленькая заминочка - после того как вордовский документ открывается - активной становится форма, откуда вызывался экспорт в ворд. Не подскажите, как сделать, чтобы она не становилась активной?
Решение
после того как вордовский документ открывается - активной становится форма, откуда вызывался экспорт в ворд. Не подскажите, как сделать, чтобы она не становилась активной? Чтобы окно MS Word сделать активным, надо добавить в код команду:Эту строку можно добавить, например, сразу после того, как окно MS Word делается видимым:
у меня таблица в ворде не открывается, база данных txt файл у меня таблица в ворде не открывается, база данных txt файл
fit13, на каком этапе возникает проблема? И какой код используется?
Сам по себе экспорт не зависит от типа БД. Представленный в теме код работает в случае, если:
- в системе установлен MS Word;
- на форме присутствует компонент TTable, TQuery, TADOTable, TADOQuery и т. п. (с подстановкой в код соответствующего имени экземпляра);
- с БД успешно устанавливается соединение.
К текстовому файлу, как к БД, можно подключиться разными способами:
- Если содержимое файла оформлено согласно формату CSV - данные записаны построчно с разделителем точка с запятой - тогда можно подключаться, как к БД Excel.
- Если может использоваться разделитель отличный от точки с запятой или (и) если надо точно задать типы полей, кодировку и прочее, тогда можно действовать так: Обращение к полям в TXT-файле
Создание отчета в Word
Здравствуйте. Заранее спасибо. У меня такой вопрос, имеется база данных в Delphi, при нажатии.
Создание отчета и его выгрузка в Excel, Word
Здравствуйте! Есть база данных в access и она соединена с делфи, мне нужно в делфи сделать отчеты.
Вывод отчета в Word
Не получается реализовать вывод отчет По таблице "прием", нужен отчет, но, к сожалению.
Вывод отчета через word
Здравствуйте, возникла такая проблема. я делаю вывод отчетов через word, нужно сделать.
Помощь в написании контрольных, курсовых и дипломных работ здесь В кодах из поста №16 - это строки № 42..44 в первом коде или 42..43 - во втором. Там можно записать названия на русском языке. Или можно взять названия из DBGrid (если этот компонент задействован в проекте). В кодах из поста №16 - это строки № 42..44 в первом коде или 42..43 - во втором. Там можно записать названия на русском языке. Или можно взять названия из DBGrid (если этот компонент задействован в проекте).
Решение
Или можно экспортировать в Excel те данные, которые представлены в DBGrid. Тогда, соответственно, и заголовки столбцов надо взять из DBGrid.Примеры с таблицей animals из демонстрационной базы DBDEMOS (устанавливается при установке BDE).
1. Способ с записью всех данных в вариантный массив, его передачей в MS Excel и оформлением.
2. Способ с построчной передачей данных в MS Excel (с помощью однострочного двумерного вариантного массива).
Mawrat, а если у меня бд в access это как то влияет? У меня тут ошибку выдаёт wdApp := CreateOleObject('Word.Application');
какую ошибку?
покажите код.
ЗЫ создал бы свою тему и дал бы ссылку на этот код. зачем писать в старой теме?
Тема старая, но для меня актуальная. Скажите пожалуйста, как сделать, чтобы при запуске, MS Word выводил страницу в альбомном виде, а не в книжном? Скажите пожалуйста, как сделать, чтобы при запуске, MS Word выводил страницу в альбомном виде, а не в книжном?Доброго времени суток.
Прочел я тему. В общем-то все понятно. Но есть вопросы.
Если мне необходимо вывести в Ворд таблицу такого вида:
_____________________________
|________________|. |
|________________|. |
|________________|. |
|________|_______|___________|
|. |. |
|______________|_____________|
|. |
|____________________________|
При чем где-то должен быть простой текст, где-то жирный, а где-то смешанный, а где-то изображение.
И да, выводить буду не из базы данных, а из объекта моего класса. Но с этим разберусь. Мне главное узнать, как создать такую таблицу.
ЗЫ И есть ли где материал, как вывести данные в pdf и html.
ЗЫЫ Хотя, с html, наверное, сам разберусь.
ЗЫЫЫ Что-то форум пробелы съедает(в примере таблицы)(заменил проделы точками)
Добавлено через 2 часа 36 минут
Разобрался, как создать таблицу.
Вот так получилось.
Только как теперь часть текста в ячейке сделать жирным(определенное количество символов в строке), вставить картинку, убрать интервал между строк и выравнивание ячеек по вертикали.
ЗЫ И есть ли возможность в Delphi 7 как-то сохранять в docx?
Добавлено через 10 минут
И где можно посмотреть методы и свойства объектов wdApp, wdDoc, wdRng, wdTable? Автодополнение, или как эта штука называется, с ними не работает.
Delphi 7 вывод отчёта в word
Ребята помогите,мне надо чтобы таблица в DBGrid1 выводилась в word
Создание отчета в MS WORD
Всем здравствуйте! У меня такой вопрос. Как сделать что бы определенная информация из моей.
Создание отчёта в Word
Здравствуйте, пожалуйста, подскажите, как создать отчёт не в QuickRep, а в Word. Причем он должен.
Создание отчета в Word
может кто сталкивался. создаю документ Word, проблема в том, что после его закрытия ругается на.
В этой статье я хочу поговорить об очередной интересной полезности, такой как создание отчетности в Microsoft Word. Недавно передо мной стала задача, автоматизировать процесс заключения договоров у меня на работе, и последующего их хранения и учета в электронном виде.
Пришлось перелопатить конечно много информации, но на выходе неожиданно для самого себя получилось очень простое,
компактное и я бы даже сказал универсальное решение, которым бы я хотел поделиться.
Многие кто по долгу работы сталкивается с заключением договоров, знает, что даже работая с типовыми их формами, все равно возникают сложности, на предмет, то пропустишь, и забудешь вбить какие то данные, то вобьешь их не туда куда надо, бывает даже и такое, когда у тебя очередь и буквально разрываешься на части, и о возможности сконцентрироваться, чтобы качественно обслужить текущего клиента, можно только мечтать. Ошибся, переписываешь все заново, опять куча потерянного времени, а особенно под конец дня вообще, жесть. В общем решил я положить этому всему край, и в очередной выходной занялся реализацией задуманного. Задача стояла следующая, необходимо было создать некую форму документа с полями, куда бы я мог вбивать данные по договору, а потом, по нажатию клавиши смог бы либо сохранить, либо распечатать, уже готовый договор.
Полный листинг получившегося приложения я приводить, здесь не буду по скольку всего очень много, а небольшой примерчик доступный для понимания мы рассмотрим, тем паче, что подробно рассмотрев его, любой из вас самостоятельно сможет создавать фишки с отчетностью даже еще круче чем получилось у меня.
Работать мы будем с шаблоном документа MS Word, для этого создаем вордовский документ, набираем в нем форму нашего договора, только вместо данных, которые мы будем перемещать в документ из нашей формы, впишем имена произвольных переменных. Допустим вместо даты, напишем слово date, Ф.И.О исполнителя - "FIO1", Ф.И.О заказчика - "FIO2" и.т.д.
Чтобы легче было ориентироваться, ниже привожу скринчик, ориентировочного шаблона:
подключаем в Uses библиотеку ComObj, объявляем глобальные переменные:
var
Dogovor,W:Variant;
Text:String;
и приступим к настройке компонентов на форме:
а) Кликаем компонент SaveDialog1, переходим к инспектору объектов, где в его свойстве Filter - прописываем Документ Microsoft Word|*.doc ;
б) В список Items компонента Combobox1, записываем какие нибудь города, например тот где вы живете или работаете). Свойство ItemIndex устанавливаете в 0;
2) Теперь создадим функцию, о которой мы говорили выше, она будет искать и осуществлять замену, для этого в разделе private пропишем: function Repl(Atx, B, C:String):String;
нажимаем Ctrl+Shift+C и описываем ее:
function TForm3.Repl(Atx, B, C: String):String;
var
F1,F2,F3:String;
begin
F1:='';
F2:=Atx;
F3:=Atx;
while
Pos(B, F2)>0 do
begin
F2:=Copy(F2, Pos (B, F2), (Length(F2)- Pos(B, F2))+1);
F1:=Copy(F3, 1, Length(F3) - Length(F2))+C;
delete(F2, Pos (B, F2), Length(B));
F3:=F1+F2;
end;
result:=F3;
end;
3) В событии OnCreate на форме, внесем настройки в DateTimePicker1 и DateTimePicker2, чтобы при запуске они показывали текущую дату:
procedure TForm1.FormCreate(Sender: TObject);
begin
DateTimePicker1.Date:=Now;
DateTimePicker2.Date:=Now;
end;
4) В событии OnClick, на кнопке "Печать" пишем:
5) В событии OnClick, на кнопке "Сохранить" пишем все тоже самое, только в самом начале, после begin, зададим параметр FileName для компонента SaveDialog1, чтобы при сохранении договоров, в имя файла автоматом вбивался номер и дата документа). А в конце опишем опции сохранения, вместо опций печати:
Теперь можно запускать проект и любоваться результатом). Если все делалось в той последовательности, как описано в статье, то все должно работать как часы, ибо пример рабочий на все 100%, а код копировался прямо из листинга.
Великовата получилась статейка, но из песни слов не выкинешь, а дорогу осилит идущий).
Кстати:
Если необходимо, можно установить ориентацию листа:
D.Application.Selection.PageSetup.Orientation:= $00000000; // Ориентация - портрет ; если нужен ландшафт - $00000001;
и размеры полей:
D.Application.Selection.PageSetup.LeftMargin:=56; // отступ слева "2,5 сантиметра ";
D.Application.Selection.PageSetup.RightMargin:=28; // отступ справа "1,0 сантиметр ";
D.Application.Selection.PageSetup.TopMargin:=28; // отступ сверху "1.0 сантиметр ";
D.Application.Selection.PageSetup.BottomMargin:=42; // отступ снизу "1,5 сантиметра ";
Единицы измерения - пункты (1 см = 28,35 п).
Вот так, например можно установить жирность шрифта, размер и выравнивание:
W.Paragraphs.Item(?).Range.Font.Bold:=True;
W.Paragraphs.Item(?).Range.Font.Size:=13;
W.Paragraphs.Item(?).Alignment:=$00000000; //Выравнивание по левому краю; если нужно
по центру - $00000001; и т.д. значения некоторых констант приведены ниже:
wdAlignParagraphLeft = 000000;
wdAlignParagraphCenter = 000001;
wdAlignParagraphRight = 000002;
wdAlignParagraphJustify = 000003;
wdAlignParagraphDistribute = 000004;
wdAlignParagraphJustifyMed = 000005;
wdAlignParagraphJustifyHi = 000007;
wdAlignParagraphJustifyLow = 000008;
wdAlignParagraphThaiJustify = 000009;
Чтобы было удобней пользоваться программой в последующем, файл шаблона можно поместить в папке с экзешником проекта. А для обращения к нему воспользоваться следующим кодом:
Читайте также: