制作中国式的报表(0分)

  • 主题发起人 主题发起人 lyq2276959
  • 开始时间 开始时间
L

lyq2276959

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi中利用Excel实现报表处理
你是否还在用QuickReport作报表的设计和处理呢?是否想用Excel强大的数据录入功能及打印预览功能来制作自己超级报表呢?下面,我将我实际运用的一些方法介绍给大家:
想法:
一、报表的制作
1、在Excel中设计制作好你的报表;
2、用VBA写一个程序,将要在报表中填入的数据的单元格的位置按顺序记录下来并生成一个对应的INI文件。(最好是新建一个工作表并填入其中。这样,所有的报表和每一个报表对应的要填入数据的单元格位置列表就可放在同一个工作簿中。)
二、Delphi中的程序设计
(一)按一般的程序设计方法设计好程序
(二)将要打印的数据库的一条记录的每个字段值放入相应的Excel表格中的相应单元格位置
(三)预览,打印报表。(若要预览或打印第N条记录,则只要将第N条记录的每个字段放入相应单元格,即可进行预览和打印本页报表)
(四)重复(二)、(三)步,直到所有数据打印完毕。
实现:
一、VBA程序
并新建一个用户窗体,并在上面放一个按钮。
Public i
Private sub commandbutton1_click()
i=i+1 ----用来计算要填入的数据的总数
worksheets("sheet1").activate ----报表放在工作表1中
a=activecell.row ----取得当前光标所在的单元格的行(活动单元格)
b=activecell.column ----取得当前光标所在的单元格的列(活动单元格)
worksheets("sheet2").activate ----要在报表中填数据的单元格的行列数据放在工作表2中
cells(i,1)=a ----按顺序记录单元格的位置
cells(i,2)=b
worksheets("sheet1").activate ----回到工作表1中(这样可在工作表1中单击下一个要填入数据的单元格,然后再单击本按钮记录下下一个要填入数据的单元格的位置)
end sub
使用:在Execl中设计制作好报表,并设置好相应的页面设置、字体、格式等等。(即制作好一个没有数据的空表格)然后运行本程序,在第一个要填数据的单元格中单击(即将光标放入单元格中),再单击一个按钮。然后再一次在第二个要填入数据的单元格中单击(即将光标放入单元格中),再单击一个按钮。然后再一次在第三个要填入数据的单元格中单击(即将光标放入单元格中),再单击一个按钮。……
二、Delphi程序设计
由于在Delphi中调用Excel有许多绍介这里不给出完整的程序,请各位自己编写。这里给出一些在Delphi中使用Excel的常用方法:
1.启动Excel
  在Uses中加入Comobj;
var
 v:Variant;
begin
 v:=CreateOleobject(‘Excel.Application’);
 v.Visible:=true;
end;

  其中,Comobj中包含了用来检索OLE的对象和向其传发命令的例程,第一行代码启动Excel,执行后Excel会在内存中出现,因此第二行代码使之可见。
2.关闭Excel
  在创建了Excel Application对象后,调用它的Quit方法完成关闭事件。
If not varIsEmpty(v) then
v.quit;
  如果需要在关闭前确定是否存盘,加入:
v.DiaplayAlert:=true;
//确定存盘
v.DiaplayAlert:=false;//不存盘,直接退出
3.加入工作表及对其表格内容的操作
var
 Sheet: Variant;
begin
 v.workbook.add;
 v.Workbooks.Add;
 v.Workbooks[1].WorkSheets[1].Name := '数据录入';
 Sheet:= v.Workbooks[1].WorkSheets['数据录入'];
 Sheet.Cells[1,1] :='试验';
Label1.Caption:=Sheet.Cells[1,1];
end;

  Sheet对象是很多页的集合,其他的Workbooks是工作薄的集合,WorkSheets对象是工作表的集合,Charts对象是图表的集合。
在写程序时用本方法可将数据库中的一条记录的各个字段值写入相应报表中的相应单元格中(要填数据的单元格所在位置已在上面用Excel中用VBA生成录记录下来了),然后调用打印方法或预览方法打印或显示本页。然后再在报表中写入下一记录的各个字段,再调用打印方法或预览方法打印或显示本页。重复进行处理即可。

4. 打印的设置
var
 Sheet: Variant;
begin
 Sheet := XLApp1.Workbooks[1].WorkSheets['数据录入'];
 sheet.PrintPreView;
//打印预览
end;

其它的操作请参考相关资料,各位若有其它更好的方法或将其写成控件,或已完成程序的设计请Email一份如我。也欢迎各位提其它的问题,让我们一起共同进步。(也可到我的主页下载程序)
我的Email地址:longyunqiang@elong.com或longyujqiang@21cn.com
其它信息请访问我的主页:http://lyq2276959.myetang.com


 
不错我先看看再说!!!
 
这其实并不是很好,最好的方法是用Word的邮件合并功能。
而用delphi去控制其全并。
 
Execl做报表在Memo、graphic字段的处理上不如Word,如果出复杂表格的中国式的报表不如用Word
Execl 无法在单元格中插入图片。对段落文字的处理也支持不好。
 
Excel的报表效果没有想象的那么好! 建议用Devepress控件包!
 
一直在寻找较好的报表解决方案,主要是希望让用户能够自定义报表。但没有找到。
 
老子早就这么用了,这种方法还是有一定局限的,用户非要安装Office,否则用不了的
 
华表,F1!
 
用Excel处理报表,好像速度有些慢。
 
是啊,楼上的兄弟说的对
 
速度问题,可以尝试ADOConnection ADOQuery 方式。
 
我也想这样处理报表。
不过有两个问题,想请教大家一下,启动了excel后,用户对表报中的数据就可以更改了。
用什么办法将数据锁住,不让修改。
另一个问题,我得系统中是为一些可能要涉外的企业做的,他们的报表就要求可以更改标题栏。
如原来的中文标题改成英文的,这样就要求标题栏可以更改。
如何做到?
 
能不能用Excel直接联接数据库中的数据,面不是通过程序把数据放入EXCEL中,
那样的话速度绝对不慢。
 
接受答案了.
 
后退
顶部