制作你的超级报表(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


 
无论怎么说用VBA都不是一个好的方案。WIN32时代有,这都过多少年了!!!
 
难道你有比用Excel更方便的制作报表方法吗?
 
还太麻烦!有没有更简单的方法!!
 
接受答案了.
 
后退
顶部