Форум: "Основная";
Текущий архив: 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.5 MB
Время: 0.006 c