![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
delphi и Word [D6, WinXP]
Homa_Programer © (2004-09-22 23:58:00)Народ , помогите как создавать отчеты в Ворде?
Помогите чем можите, хоть глупостями, ведь они тоже бывают умными...
Homa_Programer (2004-09-28 22:55:00) [1]благодарю всех за помощь)))
TUser (2004-09-24 10:12:00) [2]Есть статьи на Королевстве Делфи.
muzik (2004-09-24 10:10:00) [3]мдя..чота я не вижу тут даже близко ответа по теме
YurikGL (2004-09-23 08:52:00) [4]http://www.delphimaster.ru/cgi-bin/anketa.pl?id=1084962208
jack128 (2004-09-23 01:51:00) [5]Homa_Programer © (23.09.04 1:04) [3]
а на 1-й вопрос : скорее всего разом.
Всгда лудше разом. Ибо это быстрее.
Вообще о взаимодествии ворда почитай на Королевстве Дельфи, там кажется были статейки про это.. Да и вообще Яндекс в зубы и вперёд - если не лесть в дебри, то тема достаточно простая..
GanibalLector (2004-09-23 01:49:00) [6]Выбирай:
unit WordClipUnit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function GetGridClipText(Grid: TStringGrid): string;
var Str: string;
x, y: integer;
StartHTML,
EndHTML,
StartFragment,
EndFragment: integer;
const Line01 = 'Version:1.0'#13#10;
Line02 = 'StartHTML:000000000'#13#10;
Line03 = 'EndHTML:000000000'#13#10;
Line04 = 'StartFragment:000000000'#13#10;
Line05 = 'EndFragment:000000000'#13#10;
Line06 = 'StartSelection:000000000'#13#10;
Line07 = 'EndSelection:000000000'#13#10;
Line08 = 'Source: by Dec`s procedure'#13#10;
Line09 = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">'#13#10;
Line10 = '<HTML><HEAD></HEAD>'#13#10;
Line11 = '<BODY>'#13#10;
Line12 = '<TABLE border=1><!--StartFragment-->'#13#10;
Line13 = '<TBODY>'#13#10;
Line14 = '</TBODY><!--EndFragment--><!--EndFragment-->'#13#10;
Line15 = '<!--EndFragment--></TABLE>'#13#10;
Line16 = '</BODY>'#13#10;
Line17 = '</HTML>'#13#10;
Offset1 = Length(Line01 + Line02) -2;
Offset2 = Length(Line01 + Line02 + Line03) -2;
Offset3 = Length(Line01 + Line02 + Line03 + Line04) -2;
Offset4 = Length(Line01 + Line02 + Line03 + Line04 + Line05) -2;
Offset5 = Length(Line01 + Line02 + Line03 + Line04 + Line05 + Line06) -2;
Offset6 = Length(Line01 + Line02 + Line03 + Line04 + Line05 + Line06 + Line07) -2;
procedure FillStringWithNum(var Str: string; Offset: integer; Num: integer);
var i: integer;
begin
while Num > 0 do begin
i := Num Mod 10;
Str[Offset] := Chr(Ord('0') + i);
dec(Offset);
Num := Num div 10;
end;
end;
begin
Str := Line01 + Line02 + Line03 + Line04 + Line05 +
Line06 + Line07 + Line08 + Line09;
StartHTML := Length(Str);
Str := Str + Line10 + Line11 + Line12;
StartFragment := Length(Str);
Str := Str + Line13;
with Grid do begin
for y := 0 to RowCount - 1 do
begin
str := str + '<TR>'#13#10;
for x := 0 to ColCount - 1 do
begin
str := str + '<TD>' + Cells[x, y] + '</TD>';
end;
str := str + #13#10'</TR>'#13#10;
end;
end;
Str := Str + Line14;
EndFragment := Length(Str);
Str := Str + Line15 + Line16 + Line17;
EndHTML := Length(Str);
FillStringWithNum(Str, Offset1, StartHTML);
FillStringWithNum(Str, Offset2, EndHTML);
FillStringWithNum(Str, Offset3, StartFragment);
FillStringWithNum(Str, Offset4, EndFragment);
FillStringWithNum(Str, Offset5, StartFragment);
FillStringWithNum(Str, Offset6, EndFragment);
result := str;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Options := StringGrid1.Options + [goEditing]
end;
procedure TForm1.Button1Click(Sender: TObject);
var str: string;
hData: HGlobal;
pData: pointer;
Len: LongInt;
zzz: integer;
begin
zzz := 52863;;
OpenClipboard(Application.Handle);
str := GetGridClipText(StringGrid1);
Len:=length(str);
hData:=GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, Len);
pData:=GlobalLock(hData);
Move(PChar(str)^, pData^, Len);
EmptyClipboard;
SetClipboardData(zzz,hData);
GlobalUnlock(hData);
CloseClipboard;
end;
end.
или
procedure TForm1.Button1Click(Sender: TObject);
var App, Rgn : variant;
i, j: integer;
str: string;
const Sep = '#'; //любой символ
begin
App:= CreateOleObject('Word.Application');
App.Visible := true;
App.Documents.Add;
Rgn := App.Selection.Range;
Rgn.Collapse(0);
for i := 0 to StringGrid1.RowCount - 1 do
begin
str := '';
for j := 0 to StringGrid1.ColCount - 2 do
str := str + StringGrid1.Cells[j, i] + Sep;
str := str + StringGrid1.Cells[StringGrid1.ColCount - 1, i];
Rgn.InsertAfter(str);
Rgn.InsertParagraphAfter;
end;
Rgn.ConvertToTable(Sep);
App := null;
end;
Homa_Programer (2004-09-23 01:04:00) [7]все разом вставлять... и вообще если естькакая инфа по этой теме киньте на почту... я тока начал осваивать Ворд через делфу...даже можно сказать еще не начал... так что я не совсем понимаю ваши вопросы...
Если по шаболну то как? и Если без шаблона тоже КАК?
а на 1-й вопрос : скорее всего разом.
jack128 (2004-09-23 00:32:00) [8]Homa_Programer © (22.09.04 23:58)
Обычно отчет делают по шаблону.
Шаблон - это обычный документ Ворд, но нужных местах в этом домументе вписаны ключевые слова. При создании отчета ты ищешь эти ключевые слова и заменяешь их на свои данные.
GanibalLector (2004-09-23 00:03:00) [9]Не понял.Т.е. есть некий набор данных в Delphi,а тебе его нужно в Word??? И еще,как вставлять закладками или все разом???