![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с Word [Delphi, Windows]
Death © (2005-01-10 17:57:00)Такой вопрос:
Есть у меня массив с данными и шаблон документа Word (Word2000/XP), например
======================================
Фамилия:
Имя:
Отчество:
=====================================
мне нужно с массива скинуть в Word значения чтобы вышло так:
1 страница ============================
Фамилия: Иванов
Имя: Иван
Отчество: Иванович
2 страница ============================
Фамилия: Петров
Имя: Петр
Отчество: Петрович
.
.
.
Иванов, Петров и т.д. берутся с масива.
Пробывал через OLE и закладок в Word:
...
TDan = record
fio,
nam,
par: string;
end;
...
var
Arr: array[0..100] of TDan;
...
w.editGoto('закладка');
w.insert(Arr[1].fio);
не выходит.
Как это можно сделать. Киньте пример на мыло или в форум.
YurikGL (2005-01-16 08:49:00) [1]
> GanibalLector © (16.01.05 02:07) [9]
В целом о выборе между шаблоном и не шаблоном могу сказать так:
Если работаешь без шаблона, то всегда есть вероятность того, что на конкретной машине могут быть какие-нибудь хитрые настройки шрифтов-абзацев по умолчанию и если их напрямую не прописать типа:
R.Font.Size:=10.5;
R.Font.Name:='Bookman Old Style';
R.Font.Bold:=1;
R.Font.Italic:=1;
то на разных машинах сгенерированный документ может отличаться. Поэтому, если программа рассчитана на создание строгих документов и планируется ее распространение в другие точки а не только для внутреннего пользования, то лучше использовать шаблоны. Шаблоны еще лучше использовать тогда, когда нужно формировать действительно сложный документ с колонтитулами, заголовками, титульными листами и т.п.
Если стоит задача просто формировать текст, которой потом можно править и все не очень строго и далеко программа не поедет, то шаблоны нафиг не нужны.
GanibalLector (2005-01-16 02:07:00) [2]>Кстати, если использовать шаблоны, то зачем из программы потом шрифтами управлять?
А хрен его знает.Не подумал ;)
>если описывать пример Death то ИМХО шаблон не нужен
Да,согласен.Получится весьма красочный документ из ФИО на каждой странице.Весело ;)
YurikGL (2005-01-13 13:16:00) [3]
> GanibalLector © (12.01.05 09:21) [7]
если описывать пример Death ©
то ИМХО шаблон не нужен... если, конечно, не предполагается, что пользователь будет что-то менять в шаблоне...
В общих чертах:
Открываем ворд, создаем документ....
Для все элементов массива начало
Вставляем " ============================#13"
Вставляем текст "Фамилия"+mas[i].fam+#13
Вставляем текст "Имя"+mas[i].fam+#13
Вставляем текст "Отчество"+mas[i].fam+#13
Вставляем разрыв страницы
конец
Кстати, если использовать шаблоны, то зачем из программы потом шрифтами управлять? Я имею в виду
R.Font.Size:=10.5;
R.Font.Name:='Bookman Old Style';
R.Font.Bold:=1;
R.Font.Italic:=1;
Можно же изначально в шаблоне в нужном месте нужный шрифт поставить...
GanibalLector (2005-01-12 09:21:00) [4]2 YurikGL © (12.01.05 08:55) [6]
Не понял.Я пытаюсь понять,как бы ты делал без закладок,когда выходное кол-во документов не известно.Может он 1,а может 10,а может и 100 ???
YurikGL (2005-01-12 08:55:00) [5]GanibalLector © (11.01.05 20:32) [5]
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1105369061&n=8
GanibalLector (2005-01-11 20:32:00) [6]2 YurikGL
>Я бы без шаблона делал
Дык покажи ...Посмотрим.
YurikGL (2005-01-11 10:10:00) [7]
> GanibalLector © (11.01.05 00:02) [3]
Я бы без шаблона делал... сразу бы выкидывал и "имя" и "Иванов"
GanibalLector (2005-01-11 00:02:00) [8]По поводу [1].
По пути должен лежать файл : e:\worddoc.doc
с тремя закладками : zk1 zk2 zk3
GanibalLector (2005-01-11 00:00:00) [9]Хотя,я бы все это в потоке сделал.Добавил бы еще форму для вывода процента выполнения.Ну и,много еще чего...
З.Ы.Дерзай ;)
GanibalLector (2005-01-10 23:58:00) [10]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type TDan = record
fio,
nam,
par: string;
end;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Arr: array of TDan;
implementation
uses ComObj;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var WordApp :Variant;
Doc1,Doc2,BookmarkName:OleVariant;
i:integer;R:OleVariant;
begin
WordApp := CreateOleObject('Word.Application');
WordApp.Documents.add;
WordApp.visible:=false;
Doc1:=WordApp.ActiveDocument;
for i:=0 to length(Arr)-1 do begin
WordApp.Documents.Open('e:\worddoc.doc');
Doc2:=WordApp.ActiveDocument;
BookmarkName:='zk1';
if Doc2.Bookmarks.Exists(BookmarkName) then
begin
R := Doc2.Bookmarks.Item(BookmarkName).Range;
R.InsertAfter(Arr[i].fio);
R.Font.Size:=10.5;
R.Font.Name:='Bookman Old Style';
R.Font.Bold:=1;
R.Font.Italic:=1;
end;
BookmarkName:='zk2';
if Doc2.Bookmarks.Exists(BookmarkName) then
begin
R := Doc2.Bookmarks.Item(BookmarkName).Range;
R.InsertAfter(Arr[i].nam);
R.Font.Size:=10.5;
R.Font.Name:='Bookman Old Style';
R.Font.Bold:=1;
R.Font.Italic:=1;
end;
BookmarkName:='zk3';
if Doc2.Bookmarks.Exists(BookmarkName) then
begin
R := Doc2.Bookmarks.Item(BookmarkName).Range;
R.InsertAfter(Arr[i].par);
R.Font.Size:=10.5;
R.Font.Name:='Bookman Old Style';
R.Font.Bold:=0; // ;)
R.Font.Italic:=1;
end;
Doc2.Select;
WordApp.Selection.Copy;
WordApp.Selection.Collapse($00000000); //wdCollapseEnd
Doc1.activate;
WordApp.Selection.paste;
if i<>length(Arr)-1 then WordApp.Selection.InsertBreak;
WordApp.DisplayAlerts := 0;
Doc2.close($00000000);
end;
WordApp.Selection.HomeKey($00000006,EmptyParam);
WordApp.visible:=true;
R:=UnAssigned;
Doc1:=UnAssigned;
Doc2:=UnAssigned;
BookmarkName:=UnAssigned;
WordApp :=UnAssigned;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
setlength(Arr,2);
Arr[0].fio:='GanibalLector';
Arr[0].nam:='CooL';
Arr[0].par:='BOY';
Arr[1].fio:='ICQ:949531';
Arr[1].nam:='ICQ:751407';
Arr[1].par:='WOW';
end;
end.