![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Заполнение текстового документа из программы... [D5, WinXP]
SemFLY © (2002-07-24 01:17:00)Как мне осуществить такую вещь ? Я в Word"e составляю бланк документа, а заполнять его буду из моей программы, вводя нужную информацию в Edit.Text, а программа в свою очередь будет ставить текст в нужное поле документа.
Короче, как заполнить бланк документа, составленый в Word"e из моей программы и напечатать его ?
Подскажите, как это вообще делается ?
- - -
Как к примеру в некоторых салонах по продаже компьютеров, они вводят инициалы клиента в Edit.Text, наименование комплектующих, жмут печать и печатается уже весь документ, но заполненный из программы.
====================================
Спасибо ! :)))
MetalFan (2002-07-29 11:31:00) [1]я вообще не заморачивался с TWordApplication
а использовал WordBasic...
для заполнения таблиц использовал цикл,
единственный минус - медленно...
таблица из н-ких сот записей формируется несколько минут
SemFLY (2002-07-27 19:08:00) [2]Отлично, то что надо !!!!!!!
РАБОТАЕТ ! :))))
Спасибо TTCustomDelphiMaster. ;-)
TTCustomDelphiMaster (2002-07-27 16:19:00) [3]Это для Word2000 для 97-го в некоторых местах нужно меньше параметров ставить.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleServer, Word2000;
type
TForm1 = class(TForm)
WordApplication1: TWordApplication;
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Pattern, FileName,What : OLEVariant;
Which : OLEVariant;
Count : OLEVariant;
Name : OLEVariant;
begin
Pattern:=ExtractFilePath(Application.ExeName)+"patten.DOC";
FileName:=ExtractFilePath(Application.ExeName)+"patten1.DOC";
WordApplication1.Documents.Open // Для Word2000 нужно 12 параметров
(Pattern, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam);
What := wdGoToBookmark;
Which := unAssigned;
Count := unAssigned;
Name := "Test";
WordApplication1.Selection.GoTo_(What, Which, Count, Name);
WordApplication1.Selection.TypeText(Edit1.Text);
WordApplication1.ActiveDocument.SaveAs(FileName, // Для Word2000
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
WordApplication1.ActiveDocument.Close(EmptyParam, EmptyParam, EmptyParam);
if WordApplication1.Documents.Count = 0 then
WordApplication1.Quit;
WordApplication1.Disconnect;
end;
end.
SemFLY (2002-07-27 13:47:00) [4]Мастера, может исправите мой пример, как надо.
Вот код , исправьте что куда надо поставить.
Имя закладки Test. Информация вносимая вместо закладки находится в Edit.Text.
--------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
Pattern, FileName,What : OLEVariant;
Which : OLEVariant;
Count : OLEVariant;
Name : OLEVariant;
begin
Pattern:="D:\patten.DOC";// шаблонFileName:="D:\report.DOC";// готовый документ
//Открываем шаблон документа
WordApplication1.Documents.Open
(Pattern, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam);
//Связываем компонент с существующим интерфейсом
WordDocument1.ConnectKind:=ckAttachToInterface;
WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
//выполнения методов сервера
What := wdGoToBookmark;
Which := unAssigned;
Count := unAssigned;
Name := "Test";
WordApplication1.Selection.GoTo_(What, Which, Count, Name);
//сохранение документа и отображение его в
//OLE контейнере (предварительный просмотр)
WordDocument1.SaveAs(FileName);
WordDocument1.Close;
OleContainer1.CreateLinkToFile(FileName, False);
OleContainer1.Refresh;
end;
saxon (2002-07-27 12:52:00) [5]В ворде есть еще хорошие штуки - поля (Field)
Я когдато делал с помощью их. Все очень просто.
В шаблоне создаешь такое вот поле по типу Comments.
А в документе (TWordDocument) есть коллекция этих полей.
и ты просто находиш нужный и меняеш его на свои данные.
TTCustomDelphiMaster (2002-07-27 07:40:00) [6]SemFLY © (27.07.02 00:28)
...
procedure TSelIKForm.InsertField(Qu: TQuery; Bookmark: string; FieldName: string);
begin
WordObject.GotoBookmark(Bookmark);
if Qu.FieldValues[FieldName] <> null then
WordObject.InsertText(Qu.FieldValues[FieldName]);
end;
...
procedure TWordObject.GotoBookmark(Bookmark : string);
var
What : OLEVariant;
Which : OLEVariant;
Count : OLEVariant;
Name : OLEVariant;
begin
What := wdGoToBookmark;
Which := unAssigned;
Count := unAssigned;
Name := Bookmark;
FWordApp.Selection.GoTo_(What, Which, Count, Name);
end;
...
SemFLY (2002-07-27 01:58:00) [7]TTCustomDelphiMaster, а почему всё-таки не работает пример с метками ? В чём может быть дело ?
SemFLY (2002-07-27 00:28:00) [8]Закладку то я создал, а как произвести поиск закладки и вместо неё внести нужный текст ?
Допустим закладка называется "Test"
TTCustomDelphiMaster (2002-07-26 22:53:00) [9]Тебе же сказали делай через закладки, а ты через что делаешь? У меня есть такая программа, работает через закладки, правда она привязана к базе. Могу выслать исходники на мыло (38 кб RAR).
SemFLY (2002-07-26 21:57:00) [10]Не, мне именно Word"овский формат нужен.
VID (2002-07-26 21:36:00) [11]А не проще ли, создавать струкутру выходного документа, программно, например, при нажатии кнопки "Подготовить документ"...
Т.е. Нет никакого шаблона составленного в ворде... исходный документ в конце концов можно будет наделить расширением doc, что бы он воспринимался как word-файл (хотя на самом деле - обычный текстовик)... НЕ БУДЕТ ФОРМАТИРОВАНИЯ..
Для того, что бы было форматирование, можно будет использовать компонент RichEdit, и сохранить его содержимое в rtf - Файл...
ФОРМАТИРОВАНИЕ ТЕКСТА БУДЕТ :) хотя это уже немного сложнее...
Во всяком случае, оба метода кажется лучше, чем париться с вордовским форматом файлов...
SemFLY (2002-07-26 20:33:00) [12]Может кто-нить проверит этот пример у себя.
http://www.delphihelp.boom.ru/doc.html- пример отсюда
SemFLY (2002-07-26 20:29:00) [13]> RV
У меня почему-то вот этот пример не работает:
Вместо меток ничего не ставиться :(
Всё вроде делаю, как сказано в статье, но ничего не происходит
procedure TForm1.Button1Click(Sender: TObject);
var
//Объявление переменных, для передачи их в качестве
//формальных параметров в сервер автоматизации
Pattern, FileName, oldString, newString, Replace, ext :OleVariant;
begin
Pattern:="D:\pattern.DOC";
FileName:="D:\report.DOC";
//Открываем шаблон документа
WordApplication1.Documents.Open
(Pattern, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam);
//Связываем компонент с существующим интерфейсом
WordDocument1.ConnectKind:=ckAttachToInterface;
WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
//Следующие переменные понадобятся нам для
//выполнения методов сервера
Replace:=1;
oldString:="~1";
newString:=DateTimeToStr(Now);
//Находим в документе метки и производим их замены
WordDocument1.Range.Find.Execute
(oldString, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, newString, Replace);
oldString:="~2";
newString:=WordApplication1.UserName;
WordDocument1.Range.Find.Execute
(oldString ,EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, newString, Replace);
//сохранение документа и отображение его в
//OLE контейнере (предварительный просмотр)
WordDocument1.SaveAs(FileName);
WordDocument1.Close;
OleContainer1.CreateLinkToFile(FileName, False);
OleContainer1.Refresh;
end;
SemFLY (2002-07-26 09:05:00) [14]> RV
Спасибо ! ;)
Статья отличная, всё разобрано подробно и ещё с примерами !
RV (2002-07-24 21:18:00) [15]http://www.delphihelp.boom.ru/doc.html
архив рассылки
p||oh (2002-07-24 21:14:00) [16]можно в шаблоне документа вместо bookmark"ом вставлять конструкции типа %%%(текст для замены), а потом делать replace средствами ворда (TWordApplication). Таким образом можно редактировать бланки даже неподготовленным юзерам (некоторые не знают, что такое закладка :))
SemFLY (2002-07-24 18:59:00) [17]MBo,Tornado, Спасибо ! :)))
First_May (2002-07-24 11:04:00) [18]> Tornado © (24.07.02 07:52)
А ссылку можешь указать?
Tornado (2002-07-24 07:52:00) [19]> SemFLY © (24.07.02 01:17)
У меня есть пример как это делается (данные из БД), в твоем случае все еще проще, могу выслать, пиши.
MBo (2002-07-24 06:15:00) [20]нужно создать шаблон, расставить в нем bookmark-и, программно находить их и вставлять текст. Изучай TWordApplication