vb导出EXCEL设计打印控制属性方法汇总.docx
- 文档编号:9607364
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:25
- 大小:74.70KB
vb导出EXCEL设计打印控制属性方法汇总.docx
《vb导出EXCEL设计打印控制属性方法汇总.docx》由会员分享,可在线阅读,更多相关《vb导出EXCEL设计打印控制属性方法汇总.docx(25页珍藏版)》请在冰点文库上搜索。
vb导出EXCEL设计打印控制属性方法汇总
基于VB和EXCEL的通用数据库报表设计
常熟高等专科学校钱忆平215500
摘要本文讨论了一种基于VB和EXCEL的通用数据库报表设计方案,并结合开发实例,给出了VB调用ACESS数据库实现通用数据库报表设计的程序实现方法。
关键词数据库报表VBEXCEL
1.引言
在各种数据库管理系统中,经常涉及到数据信息的分析、统计,最后将结果信息制作成报表汇总输出。
在用VisualBasic设计的数据库管理系统中,报表的设计方法通常有两种。
一是用VB自身的数据环境设计器(DataEnvironmentDesigner)和数据库报表设计器(ReportDesigner)实现;二是采用第三方的ActiveX报表控件,在此基础上直接进行设计。
但是,两种报表设计方法都存在缺点。
前者报表设计方法较为烦琐,在设计一些具有多项汇总的数据报表时,功能不足,报表的格式控制较为困难。
后者的报表设计方法较为简便,有多种报表格式可以套用,但用户制作报表的要求和格式各不相同,难以在报表的格式和功能上真正满足用户的要求。
所以,有必要寻找一种灵活方便的、能满足用户需求的、便于程序控制的报表设计方法,解决报表设计中存在的问题。
利用VB和EXCEL进行通用数据库报表设计是一种有效的解决方案。
2.通用数据库报表设计的一般方法
VB和EXCEL都是微软公司的典型产品,VB有较强的数据管理、控制和应用程序开发能力;EXCEL是一个电子表格软件,具有强大的数据处理和格式输出功能,能根据用户的要求灵活、方便地制作出各种格式的数据报表。
EXCEL有自身的对象库,能够在VB中直接调用。
通过在VB中建立EXCEL的APPLICATION对象及相关子对象,用VB对数据库数据进行管理和调用,实现数据库数据从VB到EXCEL的直接输出,然后由EXCEL对数据格式化,实现通用数据库报表输出功能。
通用数据库报表设计的流程框图如图1。
图1通用数据库报表设计流程图
3.实现步骤
(1)用ADO数据接口与数据库建立连接
众所周知,要实现对数据库数据的管理和调用,可以用多种不同的编程语言和不同的数据库管理系统完成,各种编程语言对数据库系统的数据调用方法也有多种,有DAO、RDO、ADO等。
ADO是一种高层次的、独立于编程语言的、访问所有种类企业信息的数据访问接口。
它基于通用对象模型(COM),简化了OLEDB的操作。
OLEDB程序中使用了大量的COM接口,而ADO封装了这些接口。
VB通过ADO接口可以很方便的与数据库数据通信,实现数据的管理和调用。
(2)建立报表数据源。
数据库的报表输出实质是按用户的要求,根据报表输出内容,实现对数据库数据的条件查询。
所以,需要通过ADO建立相应的记录集(RECORDSET)和命令(COMMAND)对象,结合SELECT-SQL语句,建立报表数据源。
(3)在EXCEL中建立报表格式样板文件
充分利用EXCEL强大的报表格式功能,按照报表样张的格式要求,在EXCEL中建立报表的样板文件,确定报表的纸张大小、页边距、报表的边框、填充、对齐方式及数据格式等相关内容。
这样既能灵活的满足用户对报表输出的格式要求,同时又极大的简化了报表设计的程序控制,减少了报表设计的编程工作量。
(4)建立APPLICATION对象,实现数据填充
在VB中建立EXCEL的APPLICATION对象及相关子对象,利用VB对APPLICATION对象进行编程控制,实现数据从数据源到EXCEL单元格的数据填充。
图2列出了在报表设计中EXCEL的部分主要对象模型,各对象功能如表1。
表1EXCEL主要对象功能表
对象
功能描述
APPLICATION
处于EXCEL对象层次结构的顶层,表示EXCEL自身的运行环境
WORKBOOK
表示一个EXCEL工作簿文件
WORKSHEET
表示一个EXCEL工作表
CELLS
表示一个EXCEL单元格
RANGE
表示一个或多个EXCEL单元格
(5)报表的预览和打印输出
报表的预览和打印,既可以由VB直接编程控制EXCEL在后台运行完成,也可以由用户EXCEL运行环境下参与控制,并对报表作适当修改和完善,最后完成打印输出。
4.主要程序的实现及报表设计实例
图3电磁参数统计报表格式图
以下结合“织机用2650电磁铁电磁参数测试系统”中的报表设计为例,用VB调用ACESS数据库,说明通用数据库报表设计的程序实现方法。
织机用2650电磁铁电磁参数管理系统是一个计算机在线测试和数据管理系统,实现对2650电磁铁的直流电压、直流电流、冷态电阻、绝缘电阻、通电磁场、剩磁等六个电磁参数及温度等非电量参数的在线测试和数据管理。
系统要求既能输出指定日期的各被测电磁铁的明细报表,也能输出指定日期的被测电磁铁的统计报表。
电磁铁参数统计报表的格式如图3。
测量数据存放在ACESS数据库MYDB1.MDB的PARAMETER2数据表中。
(1)与ACESS数据库建立连接
……
PublicSubMain()
Dimdb2asADODB.connection
Dimrs2_sqlAsString
DimcccAsString
Dimcnstring2AsString
Rs2_sql="select*fromparameter2whereleft(bianhao,8)="&Format(Date,"yyyymmdd")&"orderbybianhao"
ccc=App.Path
cnstring2=cn1+ccc+"\"+"mydb1.mdb"
’cn1为全局变量,已定义。
cn1="provider=microsoft.jet.oledb.4.0;’jetoledb:
databasepassword='123';datasource=
Setdb2=NewADODB.Connection
Db2.ConnectionString=cnstring1
Db2.Open
EndSub
……
(2)建立数据源
数据源的建立要根据报表的输出要求确定,可以用ADO的RECORDSET或COMMAND对象实现。
一个统计报表通常需要根据报表的统计要求,利用SELECT-SQL语句,从数据库中有条件的选择数据建立多个数据源,才能完成对报表的数据填充。
以图3中20型电磁铁各参数的平均值为例建立数据源。
……
Dimbenban_sqlAsString
DimriqiAsString
Dimrstemp2asadodb.recordset
riqi=CStr(Text1.Text)‘Text1为程序界面上设计的一个文本框,接收用户输入的日期
Ifriqi<>""Then
'统计20类型,全部质量,全部批号各参数的平均值
benban_sql="SELECTcount(bianhao)asbianhao_cou,avg(voltage)asvol_avg,avg(current_i)asi_avg,avg(resistance_l)asr_l_avg,avg(resistance_h)asr_h_avg,avg(b_l)asb_l_avg,avg(b_h)asb_h_avgFromparameter2"
benban_sql=benban_sql&"where"&"trim(type)='20'AndLeft(bianhao,8)="+Trim(riqi)
Setrstemp2=NewADODB.Recordset
Rstemp2.ActiveConnection=db2
Rstemp2.Source=benban_sql
Rstemp2.CursorType=adOpenStatic
Rstemp2.CursorLocation=adUseClient
Rstemp2.LockType=adLockOptimisticRstemp2.Open
……
endif
……
(3)建立报表格式样板文件
在EXCEL中建立报表的样板文件,工作薄文件为REPORT.XLS,工作表名为统计表。
电磁铁参数统计报表的样板格式如图3。
(4)建立EXCEL的APPLICATION及相关对象,实现数据填充
部分程序代码如下:
……
DimxlappAsExcel.Application
Dimstrsource,strdestinationAsString
strsource=App.Path+"\"+"report.xls"
strdestination=App.Path+"\"+"tempreport.xls"
FileCopystrsource,strdestination‘复制report.xls到tempreport.xls,避免直接对样板文件操作而破坏报表格式
Setxlapp=NewExcel.Application
Setxlapp=CreateObject("excel.application")‘建立excel的application对象
xlapp.Visible=True‘使excel的运行环境可见
Setxlbook=xlapp.Workbooks.Open(App.Path+"\"+"tempreport.xls",updatelinks)‘建立workbook对象,并打开tempreport.xls工作薄
Setxlsheet=xlbook.Worksheets
(2)‘建立worksheet对象,并设定tempreport.xls工作薄的第二张工作表为当前工作表
Ifrstemp1.Fields("bianhao_cou")<>0Then‘判断数据源是否有数据,然后对cells(单元格)对象进行数据填充(以20型电磁铁各参数的平均值为例进行填充)
Withxlsheet
Cells(1,1)=Trim(riqi)+"日电磁铁测量统计报表"
Cells(2,5)=Trim(riqi)
Cells(5,2)=rstemp1.Fields("vol_avg")
.Cells(6,2)=rstemp1.Fields("i_avg")
Cells(7,2)=rstemp1.Fields("r_l_avg")
Cells(8,2)=rstemp1.Fields("r_h_avg")
Cells(9,2)=rstemp1.Fields("b_l_avg")
Cells(10,2)=rstemp1.Fields("b_h_avg")
EndWith
EndIf
……
5.结束语
利用VB对EXCEL对象的直接编程控制,实现数据库数据到EXCEL的数据填充,找到了一种通用的数据库报表设计方法。
这种报表设计方法既能灵活的满足用户对报表格式和功能的要求,大大降低了编程人员在设计报表时对报表格式和功能的编程控制难度,增强了报表设计的灵活性和通用性。
上述报表设计方法和相关程序已成功应用于常熟纺织机械厂的织机用2650电磁铁电磁参数测试系统,得到的很好的控制和输出效果。
Delphi控制Excel2000
类 别:
COM&ActiveX
(一)使用动态创建的方法
首先创建Excel对象,使用ComObj:
varExcelApp:
Variant;
ExcelApp:
=CreateOleObject(''Excel.Application'');
1)显示当前窗口:
ExcelApp.Visible:
=True;
2)更改Excel标题栏:
ExcelApp.Caption:
=''应用程序调用MicrosoftExcel'';
3)添加新工作簿:
ExcelApp.WorkBooks.Add;
4)打开已存在的工作簿:
ExcelApp.WorkBooks.Open(''C:
\Excel\Demo.xls'');
5)设置第2个工作表为活动工作表:
ExcelApp.WorkSheets[2].Activate;
或
ExcelApp.WorksSheets[''Sheet2''].Activate;
6)给单元格赋值:
ExcelApp.Cells[1,4].Value:
=''第一行第四列'';
7)设置指定列的宽度(单位:
字符个数),以第一列为例:
ExcelApp.ActiveSheet.Columns[1].ColumnsWidth:
=5;
8)设置指定行的高度(单位:
磅)(1磅=0.035厘米),以第二行为例:
ExcelApp.ActiveSheet.Rows[2].RowHeight:
=1/0.035;//1厘米
9)在第8行之前插入分页符:
ExcelApp.WorkSheets[1].Rows[8].PageBreak:
=1;
10)在第8列之前删除分页符:
ExcelApp.ActiveSheet.Columns[4].PageBreak:
=0;
11)指定边框线宽度:
ExcelApp.ActiveSheet.Range[''B3:
D4''].Borders[2].Weight:
=3;
1-左2-右3-顶4-底5-斜(\)6-斜(/)
12)清除第一行第四列单元格公式:
ExcelApp.ActiveSheet.Cells[1,4].ClearContents;
13)设置第一行字体属性:
ExcelApp.ActiveSheet.Rows[1].Font.Name:
=''隶书'';
ExcelApp.ActiveSheet.Rows[1].Font.Color:
=clBlue;
ExcelApp.ActiveSheet.Rows[1].Font.Bold:
=True;
ExcelApp.ActiveSheet.Rows[1].Font.UnderLine:
=True;
14)进行页面设置:
a.页眉:
ExcelApp.ActiveSheet.PageSetup.CenterHeader:
=''报表演示'';
b.页脚:
ExcelApp.ActiveSheet.PageSetup.CenterFooter:
=''第&P页'';
c.页眉到顶端边距2cm:
ExcelApp.ActiveSheet.PageSetup.HeaderMargin:
=2/0.035;
d.页脚到底端边距3cm:
ExcelApp.ActiveSheet.PageSetup.HeaderMargin:
=3/0.035;
e.顶边距2cm:
ExcelApp.ActiveSheet.PageSetup.TopMargin:
=2/0.035;
f.底边距2cm:
ExcelApp.ActiveSheet.PageSetup.BottomMargin:
=2/0.035;
g.左边距2cm:
ExcelApp.ActiveSheet.PageSetup.LeftMargin:
=2/0.035;
h.右边距2cm:
ExcelApp.ActiveSheet.PageSetup.RightMargin:
=2/0.035;
i.页面水平居中:
ExcelApp.ActiveSheet.PageSetup.CenterHorizontally:
=2/0.035;
j.页面垂直居中:
ExcelApp.ActiveSheet.PageSetup.CenterVertically:
=2/0.035;
k.打印单元格网线:
ExcelApp.ActiveSheet.PageSetup.PrintGridLines:
=True;
15)拷贝操作:
a.拷贝整个工作表:
ExcelApp.ActiveSheet.Used.Range.Copy;
b.拷贝指定区域:
ExcelApp.ActiveSheet.Range[''A1:
E2''].Copy;
c.从A1位置开始粘贴:
ExcelApp.ActiveSheet.Range.[''A1''].PasteSpecial;
d.从文件尾部开始粘贴:
ExcelApp.ActiveSheet.Range.PasteSpecial;
16)插入一行或一列:
a.ExcelApp.ActiveSheet.Rows[2].Insert;
b.ExcelApp.ActiveSheet.Columns[1].Insert;
17)删除一行或一列:
a.ExcelApp.ActiveSheet.Rows[2].Delete;
b.ExcelApp.ActiveSheet.Columns[1].Delete;
18)打印预览工作表:
ExcelApp.ActiveSheet.PrintPreview;
19)打印输出工作表:
ExcelApp.ActiveSheet.PrintOut;
20)工作表保存:
ifnotExcelApp.ActiveWorkBook.Savedthen
ExcelApp.ActiveSheet.PrintPreview;
21)工作表另存为:
ExcelApp.SaveAs(''C:
\Excel\Demo1.xls'');
22)放弃存盘:
ExcelApp.ActiveWorkBook.Saved:
=True;
23)关闭工作簿:
ExcelApp.WorkBooks.Close;
24)退出Excel:
ExcelApp.Quit;
(二)使用Delphi控件方法
在Form中分别放入ExcelApplication,ExcelWorkbook和ExcelWorksheet。
1)打开Excel
ExcelApplication1.Connect;
2)显示当前窗口:
ExcelApplication1.Visible[0]:
=True;
3)更改Excel标题栏:
ExcelApplication1.Caption:
=''应用程序调用MicrosoftExcel'';
4)添加新工作簿:
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
5)添加新工作表:
varTemp_Worksheet:
_WorkSheet;
begin
Temp_Worksheet:
=ExcelWorkbook1.
WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)as_WorkSheet;
ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
End;
6)打开已存在的工作簿:
ExcelApplication1.Workbooks.Open(c:
\a.xls
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)
7)设置第2个工作表为活动工作表:
ExcelApplication1.WorkSheets[2].Activate;或
ExcelApplication1.WorksSheets[''Sheet2''].Activate;
8)给单元格赋值:
ExcelApplication1.Cells[1,4].Value:
=''第一行第四列'';
9)设置指定列的宽度(单位:
字符个数),以第一列为例:
ExcelApplication1.ActiveSheet.Columns[1].ColumnsWidth:
=5;
10)设置指定行的高度(单位:
磅)(1磅=0.035厘米),以第二行为例:
ExcelApplication1.ActiveSheet.Rows[2].RowHeight:
=1/0.035;//1厘米
11)在第8行之前插入分页符:
ExcelApplication1.WorkSheets[1].Rows[8].PageBreak:
=1;
12)在第8列之前删除分页符:
ExcelApplication1.ActiveSheet.Columns[4].PageBreak:
=0;
13)指定边框线宽度:
ExcelApplication1.ActiveSheet.Range[''B3:
D4''].Borders[2].Weight:
=3;
1-左2-右3-顶4-底5-斜(\)6-斜(/)
14)清除第一行第四列单元格公式:
ExcelApplication1.ActiveSheet.Cells[1,4].ClearContents;
15)设置第一行字体属性:
ExcelApplication1.ActiveSheet.Rows[1].Font.Name:
=''隶书'';
ExcelApplication1.ActiveSheet.Rows[1].Font.Color:
=clBlue;
ExcelApplication1.ActiveSheet.Rows[1].Font.Bold:
=True;
ExcelApplication1.ActiveSheet.Rows[1].Font.UnderLine:
=True;
16)进行页面设置:
a.页眉:
ExcelApplication1.ActiveSheet.PageSetup.CenterHeader:
=''报表演示'';
b.页脚:
ExcelApplication1.ActiveSheet.PageSetup.CenterFooter:
=''第&P页'';
c.页眉到顶端边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin:
=2/0.035;
d.页脚到底端边距3cm:
ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin:
=3/0.035;
e.顶边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.TopMargin:
=2/0.035;
f.底边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.BottomMargin:
=2/0.035;
g.左边距2cm:
ExcelApplication1.ActiveShe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vb 导出 EXCEL 设计 打印 控制 属性 方法 汇总