Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.16;
Скачать: CL | DM;

Вниз

Работа с Word   Найти похожие ветки 

 
Death ©   (2005-01-10 17:57) [0]

Такой вопрос:
Есть у меня массив с данными и шаблон документа 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);

не выходит.
Как это можно сделать. Киньте пример на мыло или в форум.


 
GanibalLector ©   (2005-01-10 23:58) [1]


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.



 
GanibalLector ©   (2005-01-11 00:00) [2]

Хотя,я бы все это в потоке сделал.Добавил бы еще форму для вывода процента выполнения.Ну и,много еще чего...
З.Ы.Дерзай ;)


 
GanibalLector ©   (2005-01-11 00:02) [3]

По поводу [1].
По пути должен лежать файл : e:\worddoc.doc
с тремя закладками : zk1 zk2 zk3


 
YurikGL ©   (2005-01-11 10:10) [4]


> GanibalLector ©   (11.01.05 00:02) [3]

Я бы без шаблона делал... сразу бы выкидывал и "имя" и "Иванов"


 
GanibalLector ©   (2005-01-11 20:32) [5]

2 YurikGL
>Я бы без шаблона делал
Дык покажи ...Посмотрим.


 
YurikGL ©   (2005-01-12 08:55) [6]

GanibalLector ©   (11.01.05 20:32) [5]
http://delphimaster.net/view/10-1105369061/


 
GanibalLector ©   (2005-01-12 09:21) [7]

2 YurikGL ©   (12.01.05 08:55) [6]
Не понял.Я пытаюсь понять,как бы ты делал без закладок,когда выходное кол-во документов не известно.Может он 1,а может 10,а может и 100 ???


 
YurikGL ©   (2005-01-13 13:16) [8]


> 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-16 02:07) [9]

>Кстати, если использовать шаблоны, то зачем из программы потом шрифтами управлять?
А хрен его знает.Не подумал ;)

>если описывать пример Death то ИМХО шаблон не нужен
Да,согласен.Получится весьма красочный документ из ФИО на каждой странице.Весело ;)


 
YurikGL ©   (2005-01-16 08:49) [10]


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

то на разных машинах сгенерированный документ может отличаться. Поэтому, если программа рассчитана на создание строгих документов и планируется ее распространение в другие точки а не только для внутреннего пользования, то лучше использовать шаблоны. Шаблоны еще лучше использовать тогда, когда нужно формировать действительно сложный документ с колонтитулами, заголовками, титульными листами и т.п.
Если стоит задача просто формировать текст, которой потом можно править и все не очень строго и далеко программа не поедет, то шаблоны нафиг не нужны.



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

Текущий архив: 2005.10.16;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.046 c
1-1127887104
OlegM
2005-09-28 09:58
2005.10.16
Не происходит смена курсора


3-1125407170
menart
2005-08-30 17:06
2005.10.16
Как отловить изменение размера столбца в TDBGrid?


4-1124012368
NeoMaster
2005-08-14 13:39
2005.10.16
ReadDirectoryChagesW на все логичесике диски


1-1127712035
Ded_Matvey
2005-09-26 09:20
2005.10.16
меняется шрифт в перерисованой канве


11-1093953154
New
2004-08-31 15:52
2005.10.16
Компиляция на FPC