Создание отчета в word delphi
Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.
Создадим простой отчет на основе программы для отдела кадров из лекции №4. Чтобы не менять старый проект, скопируйте его целиком в новую папку и откройте. Кнопок на панели инструментов у нас здесь достаточно, для работы с отчетами создадим главное меню. Добавьте компонент MainMenu и создайте разделы:
Таблица 11.1 Разделы главного меню
По телефонам По адресам
Для самого отчета нам потребуется новая форма. Создайте ее, свойству Name присвойте значение fRepKadr, а модуль сохраните под именем RepKadr. Сразу же командой "File -> Use Unit" подключим к этой форме модуль данных DM, а к главной форме - только что созданный новый модуль. В палитре компонентов перейдем на вкладку QReport. Самым первым компонентом на вкладке является QuickRep - основа всех отчетов. Установите его на новую форму, и он примет вид разлинованного листа. Это своего рода холст, на котором мы будем собирать различные части нашего отчета:
Рис. 11.1 Пустой "холст" QuickRep
Выделите QuickRep и обратите внимание на его свойства. В самом верху находится свойство Bands (Ленты, полосы - англ.). Это раскрывающееся свойство, оно содержит шесть параметров. Щелкните по плюсу слева от свойства, чтобы раскрыть его. По умолчанию, все параметры имеют значение False, то есть, не установлены. Если какой-либо параметр перевести в значение True, на холсте появится соответствующая полоса. Попробуйте установить все параметры. Разберемся с их назначением.
HasColumnHeader - Заголовки колонок. Здесь мы будем вписывать названия колонок таблицы.
HasDetail - Детальная информация. На этой ленте формируются строки таблицы.
HasPageFooter - Подвал (нижний колонтитул). Здесь можно установить информацию, которая будет появляться в нижней части каждой страницы.
HasPageHeader - Шапка (верхний колонтитул). Здесь можно установить информацию, которая будет появляться в верхней части каждой страницы.
HasSummary - Суммарная информация. Содержимое этой полосы печатается один раз в самом конце отчета.
HasTitle - Заголовок отчета.
Переведите в True полосы HasPageHeader, HasTitle, HasColumnHeader, HasDetail и HasPageFooter. He установленной останется только полоса HasSummary. Если вы дважды щелкните мышью по свободному месту холста, появится настроечное окно:
Puc. 11.2. Окно настроек компонента QuickRep
В этом окне можно выполнить большинство настроек, причем в Инспекторе объектов соответствующие свойства будут изменены автоматически. Как видите, установленные нами полосы отмечены "галочкой" в разделе Bands окна. Выше располагается раздел Page frame, в котором можно задать обрамление для верхней (Top), нижней (Bottom), левой (Left) и правой (Right) границ холста, а также изменить цвет и ширину обрамления. Те же действия можно выполнить в Инспекторе объектов с помощью параметров раскрывающегося свойства Frame (пока открыто окно настроек, менять свойства в Инспекторе Объектов не получится).
Еще выше располагается раздел Other, где можно установить общие данные для холста - шрифт, размер шрифта и единицы измерения (по умолчанию mm - миллиметры). В Инспекторе объектов за это отвечают свойства Font и Units.
Далее находится раздел Margins (Границы, края), где можно задать расстояния от краев листа до рабочей части холста. На самом верху окна располагается раздел Paper size (Размер бумаги), где задаются тип листа и его размеры. Данные этих двух разделов можно изменить в Инспекторе объектов в раскрывающем свойстве Page.
Еще следует обратить внимание на свойство Options, которое имеет три параметра:
FirstPageHeader - Разрешает печать заголовков (шапку) первой страницы, если равно True.
LastPageFooter - Разрешает печать подвала последней страницы, если равно True.
Compression - Разрешает сжатие отчета при формировании из него метафайла (отчет представляет собой изображение), если равно True.
Свойство PrintlfEmpty разрешает (True) или запрещает (False) печатать отчет, если в нем нет никаких данных.
Свойство ShowProgress разрешает или запрещает показывать индикатор процесса печати отчета. По умолчанию индикатор разрешен.
Свойство SnapToGrid разрешает или запрещает привязывание компонентов к сетке. По умолчанию привязка разрешена.
Свойство Zoom имеет тип Integer и позволяет изменить масштаб отображения отчета при его разработке. Значение 100 указывает, что отчет показывается в 100% от листа бумаги. Изменение этого свойства не влияет на масштаб печати отчета или его предварительного просмотра.
Теперь приступим к формированию отчета. На холсте у нас уже должны быть расположены пять полос. Теперь мы можем на эти полосы устанавливать другие компоненты. На самом верху холста находится полоса Page Header, которая, как мы уже знаем, является верхним колонтитулом. Установите в левой части этой полосы компонент QRSysData - компонент с различного рода системной информацией. Нас интересует свойство Data этого компонента. Data содержит несколько свойств, формирующих отображаемую информацию. Разберем эти свойства.
У qrsDate (Вывод текущей даты)
У qrsDateTime (Вывод текущих даты и времени)
У qrsDetailCount (Количество строк формируемой таблицы)
У qrsDetailNo (Номер текущей строки таблицы)
У qrsPageNumber (Номер текущей страницы отчета)
У qrsReportTitle (Заголовок отчета)
У qrsTime (Вывод текущего времени)
Установим для этого свойства значение qrsDateTime, чтобы пользователь мог видеть, когда был сформирован отчет. Далее выделим всю полосу Page Header и в свойстве Frame переведем в True параметр DrawBottom. Это свойство позволяет задать обрамление выделенной полосе, а параметр DrawBottom рисует линию в нижней части полосы. То есть, мы визуально отделили колонтитул от данных листа.
В нижней части холста располагается полоса Page Footer (подвал). Здесь желательно установить верхнюю линию в свойстве Frame, отделив от данных нижний колонтитул. А по центру полосы установить еще один компонент QRSysData, установив свойство Data в значение qrsPageNumber. Этот компонент будет выводить номер текущей страницы в нижней части листа.
Примечание: для того, чтобы увидеть отчет в окне предварительного просмотра, не обязательно компилировать программу. Достаточно щелкнуть правой кнопкой мыши по свободному месту листа QuickRep, и в контекстном меню выбрать команду Preview. При этом следует иметь в виду, что такие данные, как значения вычисляемых полей, например, видны не будут. Эти данные станут доступны только в режиме выполнения программы.
Колонтитулы мы установили, займемся данными. Прежде всего, напишем заголовок отчета. Для этого установите компонент QRLabel в центре полосы Title. QRLabel похож на обычный Label и служит тем же целям: выводит на лист какой то текст. Выделите его, и в свойстве Caption напишите "Отчет по кадрам". Чтобы заголовок был красивым, щелкните дважды по свойству Font, чтобы открылось окно шрифта. Здесь установите шрифт Times New Roman, начертание выберите жирное, а размер шрифта пусть будет 18 (вы можете использовать настройки по собственному выбору). Можно изменять и цвет шрифта, но при этом имейте в виду, что чаще всего отчеты печатают на черно-белых принтерах, так что злоупотреблять разными цветами не рекомендуется.
Далее займемся полосой Column Header (Заголовки колонок). Здесь установите рядом пять компонентов QRLabel, в свойстве Caption которых напишите
Отчество Дата рождения Образование
Это будут названия колонок таблицы. Шрифт этих компонентов также желательно сделать крупнее, но не больше заголовка.
Далее займемся полосой Detail, на которой, собственно, и будет формироваться таблица. Здесь нам нужно будет в самом крайнем положении слева установить компонент QRSysData, в свойстве Data которого выбрать qrsDetailNo - перед каждой строкой будет выходить ее номер. Далее установите пять компонентов QRDBText, в которых будут отражаться данные из соответствующих полей таблицы. Эти компоненты соответствуют обычному DBText, с которым мы неоднократно сталкивались. Расположите их точно под названиями столбцов, чтобы таблица была красивой. При этом может оказаться, что компонент QRSysData "наплывает" на QRDBText - ничего страшного, данные все равно не будут мешать друг другу. Выделите все QRDBText, и в их свойстве DataSet выберите нашу таблицу fDM.TLichData, затем поочередно в свойстве DataField этих компонентов выберите соответствующие поля таблицы:
Кроме того, сам компонент QuickRep1, который является "холстом" отчета, также должен знать, из какой таблицы ему нужно брать данные. Поэтому выделите его, и в свойстве DataSet также выберите нашу таблицу ШМ.ТЬюЫЭа1а. Если этого не сделать, то в отчете будет выходить лишь текущая запись таблицы, а не все ее записи.
Собственно, отчет уже готов:
Вернитесь в главное окно проекта и сгенерируйте обработку команды меню "Отчеты - Кадры". В созданной процедуре напишите такую строку (вы ведь добавили к главному окну командой File - Use Unit наш отчет?):
procedure TfMain.N5Click(Sender: TObject); begin
После того, как вы сохраните проект, скомпилируете его и выполните команду меню, появится подобное окно с отчетом:
Как видите, окно уже содержит весь необходимый инструментарий в панели инструментов -позволяет настроить вид отчета, листать его страницы, сделать установку принтера и распечатать отчет, а также сохранить отчет в специальный файл с расширением *.qrp с возможностью последующей его загрузки. К сожалению, интерфейс этого окна доступен только на английском языке.
Наш отчет был бы красивей, если бы полученная таблица была очерчена рамкой. Исправим этот недостаток. На вкладке QReport имеется компонент QRShape, который позволяет рисовать простейшие линии и фигуры. Он имеет свойство Shape, в котором можно задать нужную фигуру. Возможные значения этого свойства:
^ qrsHorLine (Горизонтальная линия)
^ qrsRightAndLeft (Прямоугольник с очерченными левым и правым краями)
^ qrsTopAndBottom (Прямоугольник с очерченными верхним и нижним краями)
> qrsVertLine (Вертикальная линия)
Этот компонент можно использовать по-разному. Например, можно установить по одной горизонтальной линии сверху и снизу полосы Detail, а затем вертикальными линиями отделить каждый столбце страницы. Я сделал проще: каждый столбец заключил в прямоугольник (шесть компонентов QRShape), а чтобы QRShape не перекрывал текст, щелкнул по ним правой кнопкой и выбрал команду Control -> Send to Back (поместить на задний план):
Нашла на этом сайте пример.. вроде получается.. хотя не знаю как decisionGraph ещё вывести =_=
Пока что вопрос: как мне выйти из таблицы? После первой мне нужно создать ещё одну таблицу, и у меня получается, но я застряла в одной из ячеек таблицы - в ней создаётся вторая. Кажется, это как-то связано с wdRng.Start, но я не знаю, что ему присвоить. Поскажите, пожалуйста.
Это код, который здесь выкладывали.
Формирование отчета из Delphi в Excel
Здравствуйте. Нужна помощь. Необходимо при нажатии BitBtn (сформировать), из компонентов Edit1.
Формирование отчета в шаблон ворд.
В программе необходимо сделать вывод отчета в формате ворд. Есть несколько полей в которые вводится.
Формирование отчета в Ворде со значениями, введенными в Delphi
Здравствуйте. При запуске формирования отчета, открывается вордовский документ с заранее.
Создание отчета в Word
Создаю отчет в Word по шаблону как мне заменить закладки на данные из DBEdit . вот код создания.
А где лучше всего почитать про все эти методы? Примеры это конечно хорошо, но иногда что-то конкретное надо, как сейчас..
Да, в самом деле. Значит при вставке таблицы диапазон не расширяется соответствующим образом. Тогда надо сделать так:
После вставки таблицы, строку:
Это нужно в сети поискать книги и статьи по VBA и по объектной модели MS Word. Таких материалов много сейчас.
В качестве введения: Как разрабатывать приложения для работы с MS Office. Здесь материал дан на примере MS Excel. Но там описаны общие принципы, применимые и для MS Word. Кроме этого там описано, как настроить среду VBA.
Добавлено через 2 минуты
При наличии некоторого опыта и понимании общих принципов, большинство задач можно решить, пользуясь только лишь одной справкой в среде VBA.
Сохранение отчета в Word
Приветствую. Очень нужна помощь. Имеется: Несколько полей TEdit, один TMemo и один TChart.
Ошибка вывода отчета в Word
Здравствуйте, я тут столкнулась с проблемой - не могу вывести текст в Word. Вот процедура вывода.
Delphi 7 формирование PDF и Word
Доброго времени суток. Имеется необходимость формировать PDF и Word документы в Delphi 7. В.
Формирование таблицы в Word через Delphi
Добрый день. Никак не могу разобраться с построение таблиц в Word через Delphi. Прикладываю фото.
Очень часто программисты задаются вопросом – «Как же вывести данные из программы в MS Word?» как только они доходят до вывода отчетов. 99% людей используют стандартные компоненты, которые ужасны в использовании и на написание вывода информации уходит очень много времени. Я научу вас как легко и непринужденно это сделать, добавив пару функций, написанных мной, и создать сам файл в MS Word. Ведь намного удобнее и проще использовать готовый шаблон, сделанный самим, нежели всё делать из программы, не так ли? Особенно для вывода прайс-листов, договоров и тому подобные документы. Для вывода отчетов лучше использовать MS Excel. Если интересует, то статья на эту тему тоже есть. Также необходимо будет добавить пару функций.
Не забываем, что для каждой формы, где будет вывод данных, необходимо проделывать все эти действия. Если, конечно, вы порядочный программист, то можете сделать библиотеку или класс. Всё на ваше усмотрение. На всякий случай опишу подробнее, куда и что прописывать.
Заметим, что TF_MAin – это мой идентификатор формы. У вас этот параметр будет отличаться. Его можно посмотреть в «interface»->«type» первой строкой TF_MAin = class(TForm).
Не забываем, что в файле необходимо расставить эти слова в формате . Только на английском и именно в таких скобках. Чтобы он случайно не заменил другой текст. На самом деле вы можете заменять любые слова, только порой это будет чревато. А так уж точно не замените другой текст.
Не забудьте, что необходимо предварительно создать файл Word. Я создал файл «NameDoc.doc» в папке «report» и внутри файла написал <%DATE%>, дабы заменить его на сегодняшнюю дату.%DATE%>
В общем - то , и всё . Очень подходит для вывода договоров предприятия. Согласитесь, что проще взять готовый договор и где необходимо подставить изменяемые значения, к примеру - Итого: <%SUMMA%>руб. Дата: , нежели мучиться и подгонять данные из программы.%SUMMA%>
Замечу, что все стили сохраняются, то есть при замене будет жирным подчеркнутым курсивом.
В этой статье мы рассмотрим пример того, как управлять объектами Word-а (Excel - аналогично) из программ на Delphi.
Для чего это нужно ?
Задачи могут быть самые разные, в общем случае это использование возможностей Word-а в своей программе, н-р: проверка текста на орфографию; печать текста, графики; экспорт отчетов в Word или изначальное создание их там и т.д.
Подготовительные работы.
На самом деле существует несколько способов сделать это, мы рассмотрим только один (пример кроме Delphi 5, в Delphi5 для этого есть компоненты на закладке Servers переименуете в программе типы на соответствующие компоненты, дальше так же).
Для начала начнем новый проект File, New Application; File, Save All. Создадим отдельную папку для проекта и сохраним Unit1 как Main, а Project1 как WordWriter.
Далее для работы с Word-ом нам потребуется библиотека типов Word-а, это делается так: Project, Import Type Library, Add, далее переходим в папку, где стоит Word ( у меня это - "c:\program files\microsoft office) , заходим в папку Office и выбираем файл - msword8.olb (цифра -? версии Word-а - у Вас может отличаться ) или excel8.olb (для Excel).Нажимаем Оk. Delphi создаст 2 файла - Word_tlb.pas и Office_tlb.pas, их надо включить в раздел uses модуля Main нашего проекта:
Теперь займемся непосредственно программированием.
В разделе var опишем следующие переменные:
Далее проектируем форму:
- Поместим вверх нашей формы кнопку - button1 типа tbutton, поменяем заголовок (св-во Caption) на 'Старт'.
- Под кнопкой разместим панель - panel1 типа tpanel. Внутри панели поместим компонент - bevel1 типа tbevel, поменяем св-во Align на alClient (при этом рамка растянется на всю панель).
- Сверху панели (далее все компоненты будут размещаться внутри этой панели) разместим метку - label1 типа tlabel, поменяем значение св-ва Caption на 'Передать в ячейку':
- Ниже слева поместим метку - label1 типа tlabel, св-во Caption поменяем на 'X='
- Правее метки помещаем компонент Edit1 типа tEdit, св-во Text меняем на '1'
- По правой границе Edit1 помещаем компонент UpDown1 типа tUpDown, в списке св-ва 'Associate' выбираем Edit1, св-во 'Position' приравниваем '1'
- Чуть отступаем вправо и повторяем шаги 4-6 , заменив Edit1 на Edit2, UpDown1 на UpDown2, Label1 на Label2 соответственно.
- Ниже размещаем еще одну метку - label4 типа tlabel, меняем св-во 'Caption' на 'Новое значение ячейки:'
- Ниже размещаем компонент Edit3 типа tEdit, св-во Text меняем на '0'
- И, наконец, в самом низу панели размещаем кнопку BitBtn1 типа tBitBtn, меняем св-во 'Kind' на 'bkOk'.
Теперь напашем обработчики - именно в них и заключается вся функциональность программы:
1. Назначим обработчик OnClick компоненту Button1 :
2. Зададим обработчик формы:
3. Назначим обработчик OnClick компоненту Bitbtn1 :
Дополнительная информация
Справка Word-а (по Visual Basic, по умолчанию она не ставится - запустите заново Setup и поставте в соотв. месте галочку)
- Чарльз Калверт "Delphi 4. Энциклопедия пользователя" (издательство - DiaSoft)
- Марко Кэнту "Delphi4 для профессионалов" (издательство - Питер)
Если у Вас другая версия Word-а:
Параметры ф-ций могут отличаться - обратитесь к справке (см выше) или если у Вас версия Delphi 3 и выше, то используем универсальный метод - пишешь имя объекта, ставишь точку (если нужно посмотреть список параметров у функции , то после открывающей скобки ) , нажимаешь 'ctrl'+'пробел' и изучаешь существующие методы и св-ва.
Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.
Ниже мы создадим простейший пример применения Microsoft Word для генерации отчетов путем позднего связывания.
Реализуем генерацию табличного отчета в обработчике события OnClick компонента Buttonl:
// Запускаем Microsoft Uord
// Отображаем на экране окно Microsoft Word
// Создаем новый документ
// Добавляем новый абзац
// Меняем его стиль
Rng.InsertAfterC'CustomerID:Customer Name;Country'); // Перемещаемся на первую запись набора данных ADODataSetl.First; for I := 1 to Rent do begin // Добавляем новый абзац
// Добавляем поля из текущей записи в новый абзац Rng.InsertAter(ADODataSetl.Fields[0].AsString + ';' +
// Превращаем текст в таблицу
Rng := Doc.RangeCDoc.Paragraphs.Item(3).Range.Start, Doc.Paragraphs.Item(rcnt+3).Range.End), ТЫ := Rng.ConvertToTableC:'. rent. 3); // Изменяем размеры колонок таблицы
ТЫ.Columns.Item(3).Width := ТЫ .Columns.Item(3).Width - 40:
// Закрываем Word и освобождаем ресурсы
Нам следует также объявить глобальные переменные для объектов Appl icat юп, Document, Range и Table:
// Переменные для объектов Application. Document.
II Range и Table
Wd. Doc. Rng. ТЫ: Variant:
Прокомментируем приведенный выше фрагмент кода.
Во-первых, мы должны создать копию Microsoft Word, сделать ее видимой и создать новый документ:
Wd -.= Create01e0bject('Word.Application'); // Отображаем на экране окно Microsoft Hord Wd.Visiole := true:
// Создаем новый документ Wd.Documents.Add:
Затем нужно создать заголовок отчета и заголовки колонок будущей таблицы, добавляя соответствующие абзацы и меняя их стили:
// Добавляем новый абзац Doc.Paragraphs.Add: // Меняем его стиль
Затем следует, перемещаясь по записям набора данных, добавить в документ строки, соответствующие этим записям:
// Перемещаемся на первую запись набора данных
for I := 1 to rent do begin // Добавляем новый абзац
// Добавляем поля из текущей записи в новый абзац Rng.InsertAter(ADODataSetl.Fields[0].AsString+";'+
Далее мы превращаем набор строк в таблицу Word и изменяем ширину ее колонок так, чтобы корректно отобразить содержащиеся в ней данные:
// Превращаем текст в таблицу
// Изменяем размеры колонок таблицы
// Закрываем Word и освобождаем ресурсы
При выполнении этого приложения создается документ с отчетом по базе данных Northwind (рис. 4.6).
Рис. 4.6. Отчет по базе данных, созданный путем автоматизации Microsoft Word
Итак, мы научились создавать отчеты по базам данных с помощью Microsoft Word. Теперь рассмотрим, как то же самое можно сделать с помощью Microsoft Excel.
Читайте также: