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

Вниз

Работа с 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 вся ветка

Форум: "Corba";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.188 c
1-1127891416
Voffka
2005-09-28 11:10
2005.10.16
ComboBox. Как добавить колонки в выпадающий список?


14-1127317689
тихий вовочка
2005-09-21 19:48
2005.10.16
Наш №"!!:? бизнес


8-1116960003
Eraser
2005-05-24 22:40
2005.10.16
Формирование wav файла из данных в фотмате PCM


3-1125416074
Asail
2005-08-30 19:34
2005.10.16
Проблема с TQuery (удаление строк)


3-1125786977
Пантелеев Иван
2005-09-04 02:36
2005.10.16
Проблемы с фильтрацией по дате





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский