Консультация № 110117
19.11.2007, 11:43
0.00 руб.
0 3 3
Здравствуйте. Я хочу из Delphi экспортировать некоторые данные, которые храняться в базе данных, в существующий документ Word. Мне просто в определенные строки документа нужно вставлять определенное значение из базы данных. Подскажите как мне это сделать(желательно с примером кода). Заранее благодарен.

Обсуждение

Неизвестный
19.11.2007, 12:02
общий
это ответ
Здравствуйте, Orz!

Для этого лучше всего использовать компонент EkRTF.

Он берет за основу шаблон в формате rtf, в котором вместо значений программист записывает переменные. После чего из базы данных в эти переменные записываются значения.
Это удобно, так как конечный пользователь может в любой момент изменить шаблон с помощью Word.
В компоненте хороший хелп и набор примеров.
Неизвестный
19.11.2007, 12:11
общий
это ответ
Здравствуйте, Orz!
Вам потребуется шаблон вашего документа с определёнными метками в тексте где вы захотите вставлять данные нпример #ИНН# а также исходный фаил домустим txt который будет содержать значения подставляемые в шаюлон приблизительный код выглядит вот так

фаил формируется следующим образом
var
List :Tlist;
begin
List.Add(‘ИНН =‘ + ‘Получить значение ИНН из базы‘;

aList.SaveToFile(Path + aFileName + ‘.txt‘);
end;

этот пример будет работать только если у вас в одной строке одна замена иначе нужно переписывать подстановку которая в приложении.

Приложение:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; ListBox2: TListBox; ListBox3: TListBox; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}function GetValue(const str: string): string;var P : integer;begin P := pos(‘=‘, str); Result := copy(str, p + 1, length(str));end;function GetParam(const str, param: string): string;var P : integer;begin P := pos(‘=‘, str); if Copy(str,1,p-1)= param then Result := copy(str, p + 1, length(str)) else Result := ‘‘;end;function GetName(const str: string): string;var P : integer;begin P := pos(‘=‘, str); Result := copy(str, 1, p - 1);end;function RepitValue(Shb,dest : TListBox; const str: string): TListBox;var j : integer; t : string; st : array of string;Begin for J := 0 to Shb.Items.count -1 do begin setLength(st,j+1); t :=GetParam(Shb.Items[j], str); if t = ‘‘ then else Dest.Items.Add(T); end;End;procedure TForm1.Button1Click(Sender: TObject);Var s : string; i, j, g : integer; // текст шаблонаbegin ListBox1.Items.LoadFromFile(‘Путь до шаблона\имя шаблона с расширением‘); ListBox2.Items.LoadFromFile(‘Путь до данных из БД\имя файла с расширением‘); for I := 0 to ListBox1.Items.Count - 1 do begin S := ListBox1.Items[I]; if S <> ‘‘ then begin S := ListBox1.Items[I]; For J := 0 to ListBox2.Items.Count - 1 do begin g := pos (‘#‘, S); if g<>0 then begin S := StringReplace(S, GetName(ListBox2.Items[J]), GetValue(ListBox2.Items[J]), [rfReplaceAll, rfIgnoreCase]); end; ListBox3.Items.Add(S); end; end; end;end.
Неизвестный
19.11.2007, 12:13
общий
это ответ
Здравствуйте, Orz!
можно экспорптировать данные через OLE или с пом. компонента TWordApplication (есть в Д7, наверно и в др. версиях) - кому как нравится.
вот тут есть примеры:
http://delphiworld.narod.ru/base/sg_to_msword.html
http://delphiworld.narod.ru/base/export_to_word.html
http://delphiworld.narod.ru/base/delphi_and_word_ole_automation.html
...
Форма ответа