Выгрузка в ворд delphi
Известно, что Word является OLE-объектом. Суть OLE технологии - возможность из разрабатываемого приложения(клиента) взаимодействовать с другими приложениями(серверами). Все приложения Microsoft Office являются так называемыми "серверами автоматизации". Microsoft Word , являясь сервером OLE, позволяет подключаться к себе клиентам и использовать свои методы и свойства.
Алгоритм импорта данных в Word следующий:
1) создаем подключение к серверу-приложению Word,
2) создаем или открываем существующий документ
3) вносим в документ изменения
4) манипулируем документом, как хотим (сохраняем его, не показывая при этом экране или же наоборот),
5) отсоединяемся от сервера.
1) Подключение к серверу Word производится следующим образом:
var
Application: variant;
begin
Application:= CreateOleObject('Word.Application');
end;
Сначала вводим вариантную переменную, затем создаем объект OLE 'Word.Application' , и присваиваем его этой переменной. Эта процедура называется "создание экземпляра сервера". Создав этот объект, мы затем программируем его свойства и методы.
2) после создания экземпляра сервера, нужно либо создать новый документ, либо открыть уже имеющийся, дабы только что созданный экземпляр сервера не содержит документов и, следовательно информацию импортировать нам пока что некуда.
Создание нового документа
Создание документа производится методом Add :
Синтаксис метода: Add ( Template, NewTemplate, DocumentType, Visible)
Все параметры метода - типа Variant и необязательны,
Так как все параметры являются необязательными, то для создания нового документа по шаблону Normal метод можно применить без параметров:
Для создания нового документа по шаблону метод применяется следующим образом
Application.Documents.Add('C:\Program Files\
Microsoft OfficeD9\Шаблон.dot');
Например, создание нового документа в виде Web-страницы будет выглядеть как
Var
DocumentType: OleVariant;
Application:variant;
begin
Application:= CreateOleObject('Word.Application');
DocumentType:=wdNewWebPage;
Application.Documents.Add(EmptyParam,False,DocumentType,EmptyParam);
Все параметры в методах объявляются типа OleVariant . Если параметр не используется в методе, то вместо него указывается EmptyParam , что означает пустой параметр.
Открытие существующего документа Word реализуется методом Open.
Синтаксис метода:
Open (FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format, Encoding, Visible)
В параметре указывается имя файла документа, включая путь. Обязательный параметр.
Если в значении этого параметра указать значение True, то в случае открытия документа с форматом, отличного от Word, будет выводится диалоговое окно конвертирования файла. Необязательный параметр.
Указывая True , открываем документ только для чтения. Необязательный параметр.
Устанавливая значение в True , позволяем добавлять имя открываемого файла в список недавно открытых файлов в меню Файл . Необязательный параметр.
Пароль открываемого документа. Необязательный параметр.
Пароль открываемого шаблона. Необязательный параметр.
Параметр, предусмотренный для открытия файла с именем, уже открытого в данный момент. Если указать True то все изменения текущего документа не сохраняются и открывается файл с подобным именем. При значении False открытый файл активизируется, а новый не открывается. Необязательный параметр.
Пароль для сохраняемого документа. Необязательный параметр.
Пароль для сохраняемого шаблона. Необязательный параметр.
Конвертор файла, необходимый для открытия документа. Может принимать одно из следующих значений типа WdOpenFormat : wdOpenFormatAllWord , wdOpenFormatAuto , wdOpenFormatDocument , wdOpenFormatEncodedText , wdOpenFormatRTF , wdOpenFormatTemplate , wdOpenFormatText , wdOpenFormatUnicodeText , or wdOpenFormatWebPages . По умолчанию wdOpenFormatAuto . Необязательный параметр.
Кодировка для просмотра документа, может принимать любое правильное значение из ряда констант MsoEncoding . По умолчанию используется системная кодовая станица, установленная по умолчанию. Необязательный параметр.
Устанавливая True , предусматриваем видимое открытие документа. По умолчанию установлено True . Необязательный параметр.
Например, для открытия документа "c:\Example.doc" метод Open применяется как
Application.Documents.Open('c:\Example.doc'); |
а для файла "C:\Exam.doc" с паролем на открытие "1" как:
3) Все элементы рассматриваемого OLE объекта являются так называемыми коллекциями. Коллекция - есть объект, содержащий специфический набор методов и свойств. Коллекция похожа на динамический массив. В ней содержится набор объектов, которые обычно имеют один тип. Вы можете добавлять в нее элементы, удалять и получать их значения. Доступ к элементу осуществляется либо по его порядковому номеру, либо по его имени. Например, все открытые документы представляют собой коллекцию.
Обращение к документу
Обращение к открытому документу, как к элементу набора коллекции, можно по порядковому номеру методом Item. Например, обращение ко второму документу будет выглядеть как:
Нумерация всех элементов в коллекции начинается с единицы, а не с нуля.
Аналогичную операцию можно осуществить еще как.
Application.Documents(2); |
Для работы с документом, его сначала нужно активизировать, т.е. передать ему фокус, подготовить для редактирования или других операций. Активизирование документа производится методом Activate . Для активизации документа, его нужно выбрать из коллекции по его порядковому номеру:
Application.Documents.Item(2).Activate; |
или по имени файла:
Application.Document("C:\Example.doc").Activate; |
к активному документу можно обращаться, используя свойство ActiveDocument , например, закрыть активный документ:
Application. ActiveDocument.Close; |
3) Внесение изменений в документы.
Теперь настала очередь изучить иерархию методов и свойств OLE объекта.В упрощенном виде картина выглядит следующим образом:
Суть иерархии следующая: объект Application содержит коллекцию документов Documents , тот в свою очередь содержит коллекцию Paragraphs (абзацев), областей документа Range , таблиц Table , закладок Bookmark.
Вставка текста в документ
Далее по тексту мы в основном будем манипулировать коллекций объектов Range, т.е. весь текст удобно будет рассматривать как несколько непрерывных областей. Добавление текста осуществляется следующим образом: сначала создается объект Range, представляющий собой непрерывную область документа, затем методами этого объекта добавляется текст. Объект Range может объявляться как
выражение .Range (начало области, конец области)
например, объявленный ниже объект Range1 охватывает собой первые 10 символов второго документа.
var
Range1: variant;
begin
Range1:= Application.Documents(2).Range(1,10);
end;
В документе сначала можно создавать абзацы, т.е. объекты Paragraphs , и затем объединять их в области. К примеру, в начале активного документа методом Add объекта Paragraphs создаем новый абзац, затем на его основе создаем объект Range1:
var
Range1: variant;
begin
Application. ActiveDocument . Paragraphs.Add;
Range1:=Application.ActiveDocument.Paragraphs.Item(1).Range;
end;
Вставка текста производится двумя методами объекта Range: InsertAfter и InsertBefore.
Спецификация методов проста:
выражение .InsertAfter( текст) этим методом производится вставка текста после начала объекта Range
выражение .InsertBefore( текст) ,а этим - до.
при использовании этих методов, в качестве параметра указать нужно только текст в апострофах. К примеру, вызов двух операторов
Range1.InsertAfter('это текст InsertAfter');
Range1.InsertBefore('это вставленный текст InsertBefore');
даст нам две строки:
это вставленный текст InsertBefore
это текст InsertAfter
У объекта Range есть много полезных свойств, которые вам неплохо было бы узнать:
свойство Font (шрифт), которое имеет свои подсвойства:
Font .Bold:=True - жирность шрифта
Font .Name:="Arial"- название шрифта
Font .Size:= 24 - размер шрифта
Font .Color:= clRed - цвет шрифта
Font .Italic:= True - наклонность шрифта
Например, вставка жирной строки зеленого цвета:
Range1.Font.Bold:= True;
Range1.Font.Size:= 24;
Range1.Font.Size:= clGreen;
Range1.InsertAfter('вставленная строка');
Объект типа Range можно форматировать. Например, следующей строкой содержимое объекта Range выравнивается по центру:
Очень часто программисты задаются вопросом – «Как же вывести данные из программы в MS Word?» как только они доходят до вывода отчетов. 99% людей используют стандартные компоненты, которые ужасны в использовании и на написание вывода информации уходит очень много времени. Я научу вас как легко и непринужденно это сделать, добавив пару функций, написанных мной, и создать сам файл в MS Word. Ведь намного удобнее и проще использовать готовый шаблон, сделанный самим, нежели всё делать из программы, не так ли? Особенно для вывода прайс-листов, договоров и тому подобные документы. Для вывода отчетов лучше использовать MS Excel. Если интересует, то статья на эту тему тоже есть. Также необходимо будет добавить пару функций.
Не забываем, что для каждой формы, где будет вывод данных, необходимо проделывать все эти действия. Если, конечно, вы порядочный программист, то можете сделать библиотеку или класс. Всё на ваше усмотрение. На всякий случай опишу подробнее, куда и что прописывать.
Заметим, что TF_MAin – это мой идентификатор формы. У вас этот параметр будет отличаться. Его можно посмотреть в «interface»->«type» первой строкой TF_MAin = class(TForm).
Не забываем, что в файле необходимо расставить эти слова в формате . Только на английском и именно в таких скобках. Чтобы он случайно не заменил другой текст. На самом деле вы можете заменять любые слова, только порой это будет чревато. А так уж точно не замените другой текст.
Не забудьте, что необходимо предварительно создать файл Word. Я создал файл «NameDoc.doc» в папке «report» и внутри файла написал <%DATE%>, дабы заменить его на сегодняшнюю дату.%DATE%>
В общем - то , и всё . Очень подходит для вывода договоров предприятия. Согласитесь, что проще взять готовый договор и где необходимо подставить изменяемые значения, к примеру - Итого: <%SUMMA%>руб. Дата: , нежели мучиться и подгонять данные из программы.%SUMMA%>
Замечу, что все стили сохраняются, то есть при замене будет жирным подчеркнутым курсивом.
Помогите пожалуйста. Все сайты облазила, но ничего умного не нашла.
У меня есть таблица в базе данных access. Как с помощью нажатия одной кнопки сохранить ее в word?
Импорт и Экспорт в Word,Excel,Access
Прошу помочь с лабами бд.на форме есть Table,DBGrid,DataSource.Таблицы сделаны в Paradoxe.как.
Экспорт списка из Access в Word
Возможно я плохо искал(но весь поиск по форуму прошерстил), но не нашёл решения как именно.
Экспорт отчета из Access в Word
Добрый вечер! Мне нужна помощь в создании отчета в Word. В форме "ОтчетФильтр" выбираем.
Это 1 часть. Далее надо просто Записи из DataSet(AdoTable, AdoQuery) в дельфи прикрутить к построению таблицы в Ворде.
и если без делфи, то экспорт на прямую, из MSAccess действительно делается в 1 клик.
вот более верный пример построения таблицы. Это опять Этап 1. DataSet не привязан.
вот еще процедура по выводу Таблицы в Ворд.
Это все прекрасно, только в привязке DataSet у меня и проблема, а компилятор выдает ошибку при
WordApp:=CreateOleObject('Word.Application');
Это все прекрасно, только в привязке DataSet у меня и проблема, а компилятор выдает ошибку при
WordApp:=CreateOleObject('Word.Application');
Огромное спасибо.
На самом деле, я все точно так же и делала, просто либо я уже в маразм впала, либо этот мир такой жестокий и нечестный(((
Экспорт данных из Access в Word
Возможно ли экспортировать данные из Access в Word не в таблицу а в надписи? Просто создание.
Экспорт данных из таблиц Access в Word
Доброго времени суток знатоки Access. Помогите допилить скрипт на выгрузку данных в шаблон.
Экспорт данных из access в существующий шаблон word
Добрый вечер всем. Помогите пожалуйста. Очень надо!! Мне СРОЧНО нужно написать программу.
Экспорт из запроса Access в шаблон Word по критериям
Всем добрый день. Может кто сможет подсказать решение следующей задачи. БД имеет следующую.
DOCX- это файл архив, который можно распаковать сторонней программой. Формат является модернизированной версией широко известного расширения DOC. Значительным отличием стал малый вес при сохранении всех исходных параметров изображения. Если .doc представляет собой бинарный текстовый файл, то .docx содержит в себе XML-файлы и дополнительные папки, а сжатие файла уменьшает его размер.
Это универсальный формат, который с легкостью может прочитать практически любой почтовый клиент, облачное хранилище и текстовые редакторы у вас в мобильном устройстве.
Для работы с docx можно воспользоваться следующими программами: WindowsWord, Libre Office, Open Office, Word Pad, AiReader, Ice Book Reader, Calibre, Universal Viewer, Text Maker, Ability Write. Это лишь небольшой список из огромного количества программ, открывающих текстовые файлы формата DOCX.
Подробнее об XML я рассказал в статье «Записать в Excel XML из Delphi / Lazarus». Но как же создать документ DOCX из Delphi или Lazarus? А вот с помощью FastReport!
Сохраняем в формат . docx из Delphi без единой строчки кода!
Прежде всего, добавляем на форму компоненты TfrxReport, TfrxDOCXExport (экспорт в Microsoft Word 2007 XML). Затем создаём шаблон отчёта в дизайнере, формируем отчёт, нажимаем в предпросмотре “Сохранить” и вызываем экспорт из предпросмотра (ниже покажу, как реализовать запись с помощью кода Delphi). Появляется окошко настроек экспорта в DOCX.
Открыть после экспорта – результирующий файл будет открыт сразу же после экспорта программой, которая стоит по умолчанию для открытия таких документов.
Мне для программы нужно создать экзаменационный билет. Для этого мне нужно ввести в программе, написанной на Delphi, Имя, Фамилию, Предмет, Вариант и Год, и чтобы это сохранилось вместе с вариантами ответа в файл Word на местах, которые я указал.
Можно ли так сделать?
вот примерно так выглядеть должно
Ещё какие компоненты нужны для этого?
в ворде на вкладке Разработчик, есть Элементы управления содрежимым, т.ч. текстовые, рисунки и еще что то. К таким элементам можно добавить название и тэг. Вот по тэгу эти элементы можно искать ( SelectContentControlsByTag ) и заменять значения.
@teran О ней мало кто знает :) Плюс, она появилась, начиная с Офиса 2007, а в некоторых сферах принципиально сидят на 2003.
@ViktorTomilov ну это так, ради коммента написано. на ответ не тянет, но чтобы частица знаний осталась под этим вопросом. но штука удобная. я с помощью таких блоков динамически документацию к продукту собирал в зависимости от модулей, которые были у заказчика, заменял картинки в документе для каждого конкретного клиента. без делфей, конечно, на вба в самом доке.
1 ответ 1
Можно. При этом, думаю, можно обойтись и без сторонних компонентов.
Проще всего создать шаблон будущего документа, в котором текст уже будет размещен на нужных местах. Тогда вашей задачей будет всего лишь заменить его на свой. Инициализируете OleObject (разумеется, Word должен быть установлен!):
Если делать всё по-честному, то теперь нужно работать с коллекциями Word через Word.Documents.Item , т.е. к примеру, чтобы обратиться к 1й колонке последней таблицы (если у вас есть в документе таблицы), нужно делать так:
Сразу дам подсказку: чтобы потом не мучаться с перебором коллекций, один раз сделать эту замену руками при включенной записи макроса (Сервис/Макрос/Начать запись. ), тогда вы будете знать, к каким коллекциям обращаться.
Ну, а теперь немного "шулерства".
В сети много информации по работе с документами Office, рекомендую поизучать, откроете массу полезного.
Ну, а если уж совсем лениво, вот бесплатный компонент VectorSoft Report, позволяющий при небольшом старании создавать на базе готового шаблона нужный вам документ.
Читайте также: