Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];

Вниз

Заполнение текстового документа из программы...   Найти похожие ветки 

 
SemFLY   (2002-07-24 01:17) [0]

Как мне осуществить такую вещь ? Я в Word"e составляю бланк документа, а заполнять его буду из моей программы, вводя нужную информацию в Edit.Text, а программа в свою очередь будет ставить текст в нужное поле документа.
Короче, как заполнить бланк документа, составленый в Word"e из моей программы и напечатать его ?
Подскажите, как это вообще делается ?
- - -
Как к примеру в некоторых салонах по продаже компьютеров, они вводят инициалы клиента в Edit.Text, наименование комплектующих, жмут печать и печатается уже весь документ, но заполненный из программы.

====================================
Спасибо ! :)))


 
MBo   (2002-07-24 06:15) [1]

нужно создать шаблон, расставить в нем bookmark-и, программно находить их и вставлять текст. Изучай TWordApplication


 
Tornado   (2002-07-24 07:52) [2]

> SemFLY © (24.07.02 01:17)

У меня есть пример как это делается (данные из БД), в твоем случае все еще проще, могу выслать, пиши.


 
First_May   (2002-07-24 11:04) [3]

> Tornado © (24.07.02 07:52)
А ссылку можешь указать?


 
SemFLY   (2002-07-24 18:59) [4]

MBo,Tornado, Спасибо ! :)))


 
p||oh   (2002-07-24 21:14) [5]

можно в шаблоне документа вместо bookmark"ом вставлять конструкции типа %%%(текст для замены), а потом делать replace средствами ворда (TWordApplication). Таким образом можно редактировать бланки даже неподготовленным юзерам (некоторые не знают, что такое закладка :))


 
RV   (2002-07-24 21:18) [6]

http://www.delphihelp.boom.ru/doc.html
архив рассылки


 
SemFLY   (2002-07-26 09:05) [7]

> RV
Спасибо ! ;)
Статья отличная, всё разобрано подробно и ещё с примерами !



 
SemFLY   (2002-07-26 20:29) [8]

> 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 20:33) [9]

Может кто-нить проверит этот пример у себя.
http://www.delphihelp.boom.ru/doc.html - пример отсюда


 
VID   (2002-07-26 21:36) [10]

А не проще ли, создавать струкутру выходного документа, программно, например, при нажатии кнопки "Подготовить документ"...
Т.е. Нет никакого шаблона составленного в ворде... исходный документ в конце концов можно будет наделить расширением doc, что бы он воспринимался как word-файл (хотя на самом деле - обычный текстовик)... НЕ БУДЕТ ФОРМАТИРОВАНИЯ..
Для того, что бы было форматирование, можно будет использовать компонент RichEdit, и сохранить его содержимое в rtf - Файл...
ФОРМАТИРОВАНИЕ ТЕКСТА БУДЕТ :) хотя это уже немного сложнее...

Во всяком случае, оба метода кажется лучше, чем париться с вордовским форматом файлов...


 
SemFLY   (2002-07-26 21:57) [11]

Не, мне именно Word"овский формат нужен.



 
TTCustomDelphiMaster   (2002-07-26 22:53) [12]

Тебе же сказали делай через закладки, а ты через что делаешь? У меня есть такая программа, работает через закладки, правда она привязана к базе. Могу выслать исходники на мыло (38 кб RAR).


 
SemFLY   (2002-07-27 00:28) [13]

Закладку то я создал, а как произвести поиск закладки и вместо неё внести нужный текст ?
Допустим закладка называется "Test"


 
SemFLY   (2002-07-27 01:58) [14]

TTCustomDelphiMaster, а почему всё-таки не работает пример с метками ? В чём может быть дело ?


 
TTCustomDelphiMaster   (2002-07-27 07:40) [15]

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;
...


 
saxon   (2002-07-27 12:52) [16]

В ворде есть еще хорошие штуки - поля (Field)
Я когдато делал с помощью их. Все очень просто.
В шаблоне создаешь такое вот поле по типу Comments.
А в документе (TWordDocument) есть коллекция этих полей.
и ты просто находиш нужный и меняеш его на свои данные.


 
SemFLY   (2002-07-27 13:47) [17]

Мастера, может исправите мой пример, как надо.
Вот код , исправьте что куда надо поставить.
Имя закладки 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;


 
TTCustomDelphiMaster   (2002-07-27 16:19) [18]

Это для 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 19:08) [19]

Отлично, то что надо !!!!!!!
РАБОТАЕТ ! :))))
Спасибо TTCustomDelphiMaster. ;-)


 
MetalFan   (2002-07-29 11:31) [20]

я вообще не заморачивался с TWordApplication
а использовал WordBasic...
для заполнения таблиц использовал цикл,
единственный минус - медленно...
таблица из н-ких сот записей формируется несколько минут



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.62 MB
Время: 0.033 c
1-35358
nikolo
2002-07-30 10:31
2002.08.12
clCream is not a valid integer value ?


7-35481
sizmrebi
2002-05-23 17:32
2002.08.12
Matrix Printers


7-35480
Varfolomey
2002-05-28 05:28
2002.08.12
Люди как подвесить Винду?


1-35300
VictorT
2002-07-29 15:25
2002.08.12
test


8-35390
xenot
2002-04-05 20:49
2002.08.12
DelphiX и TDXImageList





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский