delphi 中如何制作word 报表(100分)

  • 主题发起人 主题发起人 nbdhj
  • 开始时间 开始时间
N

nbdhj

Unregistered / Unconfirmed
GUEST, unregistred user!
现在单位需要我作一个报表,从后台数据库中取出部分数据构成一份报表,
原本打算使用FASTREPORT开发使用,但后发现从数据库中取出打部分字段
长度变化幅度太大,实表格的间距在FASTREPORT报表中很难调,故想使用
WORD报表来进行开发,但没有这方面的经验,想请各位提供这方面的帮作
,先谢过了。
 
你在论坛里用全文搜索,可以找到很多这类的文章的...
 
问题不具体不好回答,如果只是表格也可考虑excell,自己先做一下,有具体问题,再提出讨论。
 
你最好先自己设计一下,然后能够把源代码贴出来,大家参考后,在试试
 
用WORD方式 先建立一个Word文档在其中设计一个表格,存为模板
procedure TForm_main.wsprinttoword;
var
Template,NewTemplate,ItemIndex,TempName,numrows:OleVariant;
CurrentAppDir:string;
wordtable:table;
i:integer;
begin
CurrentAppDir:=GetCurrentDir;
TempName:=CurrentAppDir+'/归档文件.dot';
Template:=TempName;
ItemIndex:=1;
try
try
WordApplication1.Connect;
except
MessageDlg('您的系统没有安装Word!', mtError,[mbOk], 0);
Abort;
end;
WordApplication1.Visible:=True;
WordApplication1.Caption:='归档文件打印输出预览';
NewTempLate:=false;
WordApplication1.Documents.Add(Template,NewTemplate);
//生成新文档
WordDocument1.ConnectTo(WordApplication1.Documents.Item(ItemIndex));
WordApplication1.Options.CheckSpellingAsYouType:=False;//关闭拼写检查
WordApplication1.Options.CheckGrammarAsYouType:=False;//关闭语法检查
DBEdit_temp.DataField:='f_type';
DBEdit_temp.DataSource:=DataSource_wsprint;
Client_wsprint.Active:=true;
Client_wsprint.First;
wordtable:=WordDocument1.Tables.Item(1);//item(1) is word 中的第一个表格
wordtable.Cell(4,1).Select ;
numrows:=Client_wsprint.RecordCount-1;
//插入一行
WordApplication1.Selection.InsertRows(numrows);
i:=0;
DBEdit_temp.DataField:='f_type';
if trim(DBEdit_temp.text)<>'' then
begin
DBEdit_temp.SelectAll;
DBEdit_temp.CopyToClipboard;
wordtable.Cell(2,3).Select ;
WordApplication1.Selection.paste;
end;
while not Client_wsprint.eofdo
begin
DBEdit_temp.DataField:='f_bh';
if trim(DBEdit_temp.text)<>'' then
begin
DBEdit_temp.SelectAll;
DBEdit_temp.CopyToClipboard;
wordtable.Cell(4+i,1).Select ;
WordApplication1.Selection.paste;
end;
DBEdit_temp.DataField:='f_zrz';
if trim(DBEdit_temp.text)<>'' then
begin
DBEdit_temp.SelectAll;
DBEdit_temp.CopyToClipboard;
wordtable.Cell(4+i,2).Select ;
WordApplication1.Selection.paste;
end;
DBEdit_temp.DataField:='f_wno';
if trim(DBEdit_temp.text)<>'' then
begin
DBEdit_temp.SelectAll;
DBEdit_temp.CopyToClipboard;
wordtable.Cell(4+i,3).Select ;
WordApplication1.Selection.paste;
end;
DBEdit_temp.DataField:='f_title';
if trim(DBEdit_temp.text)<>'' then
begin
DBEdit_temp.SelectAll;
DBEdit_temp.CopyToClipboard;
wordtable.Cell(4+i,4).Select ;
WordApplication1.Selection.paste;
end;
DBEdit_temp.DataField:='f_date';
if trim(DBEdit_temp.text)<>'' then
begin
DBEdit_temp.SelectAll;
DBEdit_temp.CopyToClipboard;
wordtable.Cell(4+i,5).Select ;
WordApplication1.Selection.paste;
end;
DBEdit_temp.DataField:='F_Dageno';
if trim(DBEdit_temp.text)<>'' then
begin
DBEdit_temp.SelectAll;
DBEdit_temp.CopyToClipboard;
wordtable.Cell(4+i,6).Select ;
WordApplication1.Selection.paste;
end;
DBEdit_temp.DataField:='D_bgqx';
if trim(DBEdit_temp.text)<>'' then
begin
DBEdit_temp.SelectAll;
DBEdit_temp.CopyToClipboard;
wordtable.Cell(4+i,7).Select ;
WordApplication1.Selection.paste;
end;
Client_wsprint.Next;
i:=i+1;
end;
WordApplication1.Disconnect;
except
on E:Exceptiondo
begin
ShowMessage(E.Message);
WordApplication1.Disconnect;
end;
end;

注意Word不同的版本可能有不同的表现,单元格排列命名方式不同,其实用Word不是好方法
我现在基本不用,还是FastReport好用
 
接受答案了.
 
后退
顶部