基于VB实现复杂报表设计
在VB中用数据报表设计器创建报表
在VB中用数据报表设计器创建报表数据环境设计器(Data Environment designer)与数据报表设计器(Data Report designer)均是Visual Basic 6.0的新增功能,它们的出现大大增强了Visual Basic处理数据的能力。
在以往的Visual Basic版本中,制作报表都是通过第三方产品来完成并通过ActiveX控件输出的。
这两种设计器的出现,使得Visual Basic程序员再也不用考虑选择一个什么样的第三方工具设计报表了,所有的设计全部在Visual Basic内部完成,再加上Visual Basic 6.0新增的开发IIS应用程序和开发DHTML应用程序功能,使得Visual Basic 6.0是一个名副其实的装备齐全的集成开发环境了。
下面我们以一个比较简单的报表为例,详细阐述如何使用数据环境设计器和数据报表设计器来设计一个数据报表。
一、数据环境设计器与数据报表设计器数据环境设计器提供了一个交互式的设计环境。
通过设置Connection对象和Command 对象的属性,可以快速完成到一个数据源的连接。
对于设置好的数据环境设计器,可以将它的对象拖放到表单上或是报表上,它会自动创建并完成数据绑定控件的设置。
数据报表设计器是一个极为灵活的设计报表的工具。
它以数据环境设计器作为数据源,能创建有层次的、汇总若干个关系型数据表数据的复杂报表。
除了像传统的报表设计工具那样能将报表通过打印机输出以外,数据报表设计器还能以HTML或文本文件的格式输出报表。
二、数据环境对象数据环境设计器包含以下几个对象:1. 数据连接(Connection)对象:连接对象表示到一个作为数据源的远端数据库或本地数据库的连接。
在数据环境中必须至少包含一个连接对象,要使用数据环境存取数据,必须首先创建连接对象。
2. 数据命令(Command)对象:命令对象定义了从数据库连接中将取回什么数据的详细信息。
VC与VBA结合实现复杂报表
摘 要 介绍了在 )* && 中利用 +,-./01 技术调用 )2+ 对象来制作复杂报表的原理, 以及通过 )2+ 完成一个动态报表任务的具 体过程, 并给出了具体的实现方法。 关键词 )* && )2+ +,-./01 3456 复杂报表
%&$’()& "*+,’("$-&. %&,*%-/ !($ !" && $0. !#$
(Z)报表表头
7#(1J&*1’,"G? 7#(1J&O9’&? -1&G? ;&&X-1&G > G,;&&XL91’!"#$%&’( ‘从设置页眉页脚转换到正文 ;&2&#(1"’? 83A&8&Y( (&Y(: > 4射击训练成绩表4 式改为 “标题 H” ;&2&#(1"’? O9+9<+9AB0"+%9( ? 721<’%&’( > G,721<’O9+9<+9AB.&’(&+ ‘表头文字居中 ;&2&#(1"’? 83A&O9+9<+9AB ;&2&#(1"’? 0"’( ? ;1[& > HN ‘回车, 设置下一段落 ‘设置字体为黑体 ‘输出文字 ‘设置字体大小为四号 “黑体” ;&2&#(1"’? 0"’( ? C9%& > ;&2&#(1"’? 83A& 8&Y( (&Y(: > 44 ‘设置表头文字 ‘将表头文字样 (4标题 H4) ;&2&#(1"’? ;(32& > 7#(1J&!"#$%&’( ? ;(32&)
VB中巧用Excel实现报表设计
VB中巧用Excel实现报表设计摘要:本文结合实例介绍了在VB中利用Excel实现复制报表的设计的方法,该方法把VB强大数据库管理与Excel灵活的报表设计有机结合起来,简化了编程,提高了程序的便利性。
关键词: Visual Basic Excel 报表引言在数据库应用中,数据报表是非常重要的部分,Visual Basic中的数据报表器可以很方便地创建数据报表,但由数据报表器设计的表格样式单一,功能较少。
微软公司的Excel软件想必大家都很熟悉,它那强大的报表设计功能和简单的操作界面,给大家留下了很深的印象。
若能把VB中的数据输出至Excel格式的报表中,使得VB的数据库管理功能与Excel的报表设计功能结合起来,将大大方便普通用户的使用。
本文借助一个实例详细介绍VB中如何利用Excel进行报表设计的方法。
1.Excel对象借助Excel对象,可以很方便地在VB数据库程序中生成Excel报表。
应用程序的最终用户在Excel环境中对报表做进一步的处理,如格式修改、打印预览、打印及保存等。
Excel对象封装了Microsoft Excel的全部对象,我们主要使用其中的五种对象,详细介绍如下。
Application对象:表示Excel应用对象,可以控制Excel应用程序的外观或功能[1],是访问Excel其他对象的切入点。
Workbook对象:表示Excel中的工作簿,即对应一个Excel文件,可以实现对Excel工作簿的各种控制[1]。
Worksheet对象:表示Excel中的工作表,可以实现对Excel工作表的各种控制[1]。
Range对象:表示Excel中的区间,例如可以代表Excel中的某一单元格、某一行、某一列、某一选定区域[1]。
Cells对象:表示Excel中的一个单元格[2],通过该对象读取Excel中的数据或将数据写入Excel中。
2.操作步骤在VB中借助Excel生成报表,需完成如下工作:(1)在Excel中制作报表模板,设计报表标题、表头的样式,包括字体字号、边框等等。
VB利用DataReport做报表详解
VB利用DataReport做报表首先介绍一下DataReport对象的几个常用属性。
一是DataSource,用于设置一个数据源,通过该数据源,数据使用者被绑定到一个数据库;二是DataMember,从DataSource提供的几个数据成员中设置一个特定的数据成员;三是LeftMargin、RightMargin、TopMargin、BottomMargin等,用于指定报表的左右上下的页边距;四是Sections,即DataReport的报表标头、页标头、细节、页脚注、报表脚注5个区域,如果加上分组(可以有多层分组),则增加一对区域,即分组标头、分组脚注。
其中DataSource一般是一个数据环境或是ADODB.Connection类型的变量,而DataMember则对应数据环境中的Command或是ADODB.RecordSet类型的变量,推荐使用数据环境及Command,页边界大家肯定都很清楚,下面我主要介绍以下Sections,这也是DataReport的精髓所在。
Sections是一个集合,您可以为每一个Section指定名称,也可以用其缺省的索引,从上到下依次为1、2…。
每个Section均有Height和Visible属性,您可以在一定条件下使一个Section不可见。
在Section中可以放置各种报表控件,其中RptLabel、RptImage、RptShape 和RptLine可以放在任意的Section中,用于输出各种文字、图形及表格线;RptTextBox只能放在细节中,一般用于绑定输出DataMemeber提供的数据字段;RptFunction只能被放置在分组注脚中,用于输出使用各种内置函数计算出的合计、最大值、最小值、平均值、记数等等。
上述报表控件中常用公共属性有用于控制位置及高度宽度的Top、Left、Height、Width和控制可见性的Visible;其中RptTextBox还有DataField、DataMember、DataFormat及Font属性;其他属性不再多说。
vb报表设计
VB 报表设计1、 工程->添加Data Report2、 工程->添加Data Environment3、 打开Data Environment (默认名为DataEnvironment1,可以修改),右击->添加连接,默认生成一个连接Connection14、 右击Connection1->选择属性->提供程序->选择Oracle OLE DB5、 连接属性设置如下,并测试连接。
6. 连接成功后,右击Connection1->添加命令,默认生成Command17. 右击Command1->属性,出现如下设置界面,选择数据库对象(表、视图、过程等)8. 建立DataReport 与Data Environment 的关联点击DataReport1,在属性设置中,将DataSource 设置为DataEnvironment1,DataMember为Command1.9. 设置检索结构在DataReport1上单击鼠标右键,选择“检索结构”命令,出现对话框“用新的数据层次代替现在的报表布局吗?” ,单击“是”按钮,将向报表设计器添加新的分组,分组与数据环境中的Command1命令对象有“一对一”的对应关系。
10.设置DataReport1的各个section(标头,细节等)。
在页标头(PageHeader)下,从控件箱中选择RptLabel控件,将Caption属性设置为“****明细”;·从数据环境设计器中将所需显示的字段拖放到细节(***_Detail)其中住院号:住院号。
前一表示标签(固定文本),后一项表示数据源中的字段·设置DataRe port1属性的“GridX”和“GridY”都为5;使用控件箱中的RptLine在分组注脚添加直线。
在页标头标签添加直线;11. 显示数据报表使用程序代码显示数据报表,在“工程资源管理器”窗口,双击“form1”窗体图标,并窗体上放置一个按钮cmdShow。
在VB中用数据报表设计器创建报表
在VB中用数据报表设计器创建报表数据环境设计器(Data Environment designer)与数据报表设计器(Data Report designer)均是Visual Basic 6.0的新增功能,它们的出现大大增强了Visual Basic处理数据的能力。
在以往的Visual Basic版本中,制作报表都是通过第三方产品来完成并通过ActiveX控件输出的。
这两种设计器的出现,使得Visual Basic程序员再也不用考虑选择一个什么样的第三方工具设计报表了,所有的设计全部在Visual Basic内部完成,再加上Visual Basic 6.0新增的开发IIS应用程序和开发DHTML应用程序功能,使得Visual Basic 6.0是一个名副其实的装备齐全的集成开发环境了。
下面我们以一个比较简单的报表为例,详细阐述如何使用数据环境设计器和数据报表设计器来设计一个数据报表。
一、数据环境设计器与数据报表设计器数据环境设计器提供了一个交互式的设计环境。
通过设置Connection对象和Command 对象的属性,可以快速完成到一个数据源的连接。
对于设置好的数据环境设计器,可以将它的对象拖放到表单上或是报表上,它会自动创建并完成数据绑定控件的设置。
数据报表设计器是一个极为灵活的设计报表的工具。
它以数据环境设计器作为数据源,能创建有层次的、汇总若干个关系型数据表数据的复杂报表。
除了像传统的报表设计工具那样能将报表通过打印机输出以外,数据报表设计器还能以HTML或文本文件的格式输出报表。
二、数据环境对象数据环境设计器包含以下几个对象:1. 数据连接(Connection)对象:连接对象表示到一个作为数据源的远端数据库或本地数据库的连接。
在数据环境中必须至少包含一个连接对象,要使用数据环境存取数据,必须首先创建连接对象。
2. 数据命令(Command)对象:命令对象定义了从数据库连接中将取回什么数据的详细信息。
用VB创建复杂表格
用VB创建复杂表格---- 数据库管理系统的开发人员经常感叹的一个问题就是:我们中国人的报表太复杂了!无规则、嵌套、斜线、交叉线等历来都是困挠开发人员的最大问题。
设计一个数据库固然有一定的技巧,设计数据操作也固然需要一定的逻辑分析能力,但这些问题对一般的开发人员来说应该是不成为问题的。
用户可是不管你采用了多么灵活的算法多么方便的操作,他们最感兴趣的是最后他们出来的报表如何漂亮,出报表的操作如何简单(最好是一个按钮解决所有的问题)。
笔者在开发数据库管理系统方面也稍有些经验,从FoxPro、Delphi、Power Builder一直到现在用的VB,都遇到过设计打印报表的问题,这些软件在设计报表的过程中可谓各有千秋,我这里不一一细说。
我在这里只向大家介绍一种我迄今为止最为满意的一种设计打印报表的方法:利用VB操作EXCEL来生成复杂的报表。
---- 一. 用VB创建外部EXCEL对象---- 大多数大型ActiveX-enabled 应用程序和其它ActiveX 部件,在它们的对象层次中都提供了一个顶层外部可创建对象。
该对象提供了对该层次中其它对象的访问,并且还提供对整个应用程序起作用的方法和属性。
---- 例如,每个Microsoft Office 应用程序提供一个顶层App lication 对象。
下面语句显示了对Microsoft Excel的Applicatio n 对象的引用:Dim xlApp As Excel.ApplicationSet xlApp = New Excel.Application---- 然后,可以用这些变量来访问在EXCEL应用程序中的从属对象、以及这些对象的属性和方法。
例如:Set xlApp = CreateObject("Excel.Application")…激活EXCEL应用程序xlApp.Visible = False …隐藏EXCEL应用程序窗口Set xlBook = xlApp.Workbooks.Open(strDestination)…打开工作簿,strDestination为一个EXCEL报表文件Set xlSheet = xlBook.Worksheets(1)…设定工作表---- 二. 用EXCEL 97设计报表的模版文件---- EXCEL 97是一个非常优秀的创建报表的工具。
用VB实现WinCC归档数据的复杂报表
其结果和 )1PY=.Z 中输出的数据一致,由此可证明这种方
法是很有效的。
! 应用实例
用 )1PY=.Z 数据采集软件采集到的数据,用以上方法可以
成功的转换成 2 语言可识别出的数据。下面是一组实测数据进
行转换前后在 )1PY=.Z 环境下和在 2 环境下的对比:
’)删 除 多 余 的 模 板 :
编 程 进 行 归 档 、查 询 、过 滤 、报 表 打 印 ,以 及 对 历 史 数 据 查 询 、过 滤、报表打印。系统充分利用 .M4-, 非常强大的报表处理功能, 以 及 Yc 的 可 扩 展 性 强 ,将 Yc 与 .M4-, 集 成 ,以 实 现 用 户 所 要 求 的 报 表 ;同 时 ,实 现 了 数 据 灵 活 备 份 ,解 决 了 工 程 实 际 问 题 。目 前 该 系 统 已 投 入 运 行 ,性 能 良 好 。
是后台调用 .M4-,。 $)启动 .M4-,、复制模板:
<-+ 8PfQ-[ I Q-[ .M4-,9]HH,*41+*8/ <-+ 8PfQ-[ I 2O-1+-aPf-4+@6.M4-,91HH,*41+*8/6A
<-+ 8PfQ-[ I Q8+:*/^ p*,, ]HH9e1+: U 6L+-?H$9M,76 m 删除临时模板 # 结束语
N-(2DDX.E[ N-F8I T /.3?/DO.K;F)I N-(Y;D<=.[ /.3?/DO.K;(A?0.X.5= ,??;
S(9 数据查询和过滤 使用 *+, 语句实现时间段和数据过滤时间的子查询,并将查
vb报表设计
第六节报表设计对一个完整的数据库应用程序来说,制作并打印报表是不可缺少的环节。
VB 6.0 提供了DataReport 对象作为数据报表设计器(DamReport designer),DataReport对象除了具有强大的功能外,还提供了简单易操作的界面。
DataReport对象可以从任何数据源包括数据环境创建报表,数据报表设计器可以联机查看、打印格式化报表或将其导出到正文或HTML页中。
一、报表设计器数据报表设计器由DataReport对象、Section对象和DataReport控件组成。
1.DataReport对象DataReport对象与VB的窗体相似,同时具有一个可视的设计器和一个代码模块,可以使用设计器创建报表的布局,也可以在代码模块中添加代码。
在“工程”菜单上,单击“添加DataReport”命令,将数据报表设计器添加到工程中,则出现如图5-6-1所示的DataReport1对象,由“报表标头”、“页标头”、“细节”、“页注脚”和“报表注脚”组成。
图5-6-1·报表标头:指显示在一个报表开始处的文本,例如用来显示报表标题、作者或数据库名。
·页标头:指在每一页顶部出现的信息,例如用来显示每页的报表标题。
·分组标头、注脚:指数据报表中的“重复”部分。
每一个分组标头与一个分组注脚相匹配,用于分组。
·细节:指报表的最内部的“重复”部分(记录),与数据环境中最低层的Command 子对象相关联。
·页注脚:指在每一页底部出现的信息,例如,用来显示页码。
·报表注脚:指报表结束处出现的文本,例如,用来显示摘要信息或一个地址或联系人姓名。
报表注脚出现在最后一个页注脚之前。
2.Section对象数据报表设计器的每一个部分由Section对象表示,如图5-6-1中的Section1~Section5。
设计时,每一个Section由一个窗格表示,可以单击窗格以选择页标头,编程改变其外观和行为,也可以在窗格中放置和定位控件,对Section对象及其属性进行动态重新配置,更改每一个Section对象的布局来设计报表。
VB中多功能报表的实现方法
VB中多功能报表的实现方法一、前言VB中开发数据库系统,报表的打印是其中最重要的也是必须常用的功能模块这一。
按照报表实现的方法大至可分为三类:第1类是较原始的方法,直接控制打印机对象用Printer进行画线和打印;第2类是使用控件。
第3类是将需要打印的报表保存为其它应用程序可以读取的格式,或直接输入到其它程序,利用其强大的打印功能实行打印操作。
详细介绍:Data Report是VB自带的控件,使用Data report的情况大多数采用数据绑定的模式,也就是将此控件与数据库的数据表绑定起来以便可以不用编写代码就轻松完成报表的设计。
正因为Data Report大多是采用数据绑定模式,所以很难实现,内容较多格式复杂的报表。
Crystal Report就是人们常说的水晶报表,它是第三方控件是Seagate公司出品的报表打印浏览工具,在其8.0以上版本的功能就非常强大,控制灵活,堪称是为经典的报表设计工具。
它的不足之处就是体积较大,并且是以商业为目的而开发的,价格比较昂贵。
Active Report是Data Dynamic公司出品的优秀打印控件。
功能完备,控制灵活。
虽然和水晶报表相比,名气不那么大,甚至有很多人不知道它的存在,但是它在.net报表开发中表现十分出色。
使用外部工具实现报表打印,是指用VBA调用一些外部软件解决打印问题,其中office中的word的excel中的打印是常被借用到的。
这种方法的好处是控制十分简单,打印功能十分强大,不需要写打印的代码。
但它有一个唯一的缺点就是在用它之前必须安装这类软件,而且给人感觉总是在用其它人的东西。
使用Printer对象编程进行打印,最大的问题是就是要经常计算坐标,需要考虑很多琐碎的问题,代码量比较大,实现的打印预览功能简单。
优点是控制灵活,且打印效果比较好,在实应用中,对于一些灵活度较高,功能复杂的报表使用该方法是比较合适的。
本文也主要介绍了这种方法的实现过程。
VB利用DataReport做报表详解
首先介绍下DataReport对象几个常用属性是DataSource用于设置个数据源通过该数据源数据使用者被绑定到个数据库; 2是DataMember从DataSource提供几个数据成员中设置个特定数据成员;3是LeftMargin、RightMargin、TopMargin、BottomMargin等用于指定报表左右上下页边距; 4是Sections即DataaReport报表标头、页标头、细节、页脚注、报表脚注5个区域如果加上分组(可以有多层分组)则增加对区域即分组标头、分组脚注其中DataSource般是个数据环境或是ADODB.Connection类型变量而DataMember则对应数据环境中Command或是ADODB.RecordSet类型变量推荐使用数据环境及Command页边界大家肯定都很清楚下面我主要介绍以下Sections这也是DataReport精髓所在Sections是个集合您可以为每个Section指定名称也可以用其缺省索引从上到下依次为1、2…每个Section均有Height和Visible属性您可以在定条件下使个Section不可见在Section中可以放置各种报表Control控件其中RptLabel、RptImage、RptShape和RptLine可以放在任意Section中用于输出各种文字、图形及表格线;RptTextBox只能放在细节中般用于绑定输出DataMemeber提供数据字段;RptFunction只能被放置在分组注脚中,用于输出使用各种内置计算出合计、最大值、最小值、平均值、记数等等上述报表Control控件中常用公共属性有用于控制位置及高度宽度Top、Left、Height、Width和控制可见性Visible;其中RptTextBox还有DataField、DataMember、DataFormat及Font属性;其他属性不再多说然后介绍下我使用经验是对想控制报表Control控件按类型有规律命名; 2是用RptShape矩形框做表格线框比用RptLine画框省事多了只有斜线才使用RptLine; 3是报表标题及报表中表头文字、日期及页码用RptLabel其中Caption属性支持转义%D为长格式日期%d为短格式日期%P为总页数%p为当前页码(注意:D和d,P和p大小写的区别); 4是对固定报表在设计窗口直接将报表Control控件摆放到位对于活报表应首先考虑报表最大情形将足够Control控件分别放置在区别区域位置大小可以不必深究然后在报表输出前用VBA代码对所有Control控件属性进行调整包括位置、高度、宽度、字体、对齐方式、显示格式、可见性等等相应对Section也应根据情况调整其高度和可见性最后用个例子模板来介绍说明其使用思路方法连接数据库With 数据环境.rsCommand名If .State = adStateOpen Then .Close .Source = SQL语句.Open 打开想输出数据库数据项以便输出End WithWith 报表名.DataSource=数据环境.DataMember=Command名这两行也可固定设好而不必每次设置设置页表头部分(RpttLabel…为报表Control控件名).Sections(2).Controls("RptLabelPage").Caption = "共%P页第%p页".Sections(2).Controls("RptLabelDate").Caption = "打印日期:%D".Sections(3).Controls("RptLabel1").Left=……设置细节部分(RptShapeX、RptTextBoxX为报表Control控件名).Sections(3).Controls("RptShape1").Left=….Sections(3).Controls("RptShape1").Top=….Sections(3).Controls("RptShape1").Height=….Sections(3).Controls("RptShape1").Width=….Sections(3).Controls("RptTextBox1").DataMember=Command名.Sections(3).Controls("RptTextBox1").DataField=字段1.Section s(3).Controls("RptTextBox1")=…….Sections(3).Controls("RptShapeN").Visible=False.Sections(3).Controls("RptTextBoxN").Visible=False…. Sections(3).Height=计算出或固定细节高度动态调整报表标题(RptLabelTitle为报表标签Control控件名).Sections(2). Controls("Rpt LabelTitle").Left=…….Sections(2). Controls("RptLabelTitle").Alignment=……调整完毕后.Show 或 .PrReportEnd With这样做优点是报表设计时简单调整方便、随意只需更改点代码而不必为了点点修改而费神在设计窗口调整半天vb6.0 中,用"datareport" 报表控件制作报表,纸张定义 A4 A3 <上一篇 | 下一篇> '在vb6.0中,用"datareport" 报表控件制作报表,当使用报表预览功能时,"datareport"'报表控件将使用"windows系统的当前默认打印机"的打印设置,若该打印设置纸张尺寸(如A4纸)小于"datareport"'报表控件所需纸张尺寸(如A3纸),则"datareport" 报表预览时将会出现"打印纸张尺寸小于报表宽度"错误,'请教如何用代码设置"windows系统的当前默认打印机"的打印机纸张尺寸,而不需用"公共对话框"的打印设置方法?Option ExplicitPublic Enum PrinterOrientationConstantsOrientPortrait = 2OrientLandscape = 1End Enum'Printer.PaperSize = vbPRPSA3Private Type DEVMODEdmDeviceName As String * 32dmSpecVersion As IntegerdmDriverVersion As Integer dmSize As IntegerdmDriverExtra As IntegerdmFields As LongdmOrientation As IntegerdmPaperSize As IntegerdmPaperLength As IntegerdmPaperWidth As IntegerdmScale As IntegerdmCopies As IntegerdmDefaultSource As Integer dmPrintQuality As Integer dmColor As IntegerdmDuplex As IntegerdmYResolution As IntegerdmTTOption As IntegerdmCollate As IntegerdmFormName As String * 32 dmUnusedPadding As Integer dmBitsPerPel As IntegerdmPelsWidth As LongdmPelsHeight As LongdmDisplayFlags As LongdmDisplayFrequency As Long End TypePrivate Type PRINTER_DEFAULTSpDataType As StringpDevMode As LongDesiredAccess As LongEnd TypePrivate Type PRINTER_INFO_2pServerName As LongpPrinterName As LongpShareName As LongpPortName As LongpDriverName As LongpComment As LongpLocation As LongpDevMode As LongpSepFile As LongpPrintProcessor As LongpDataType As LongpParameters As LongpSecurityDescriptor As LongAttributes As LongPriority As LongDefaultPriority As LongStartTime As LongUntilTime As LongStatus As LongcJobs As LongAveragePPM As LongEnd TypePrivate Const DC_PAPERNAMES = 16Private Const DC_PAPERS = 2Private Const DC_PAPERSIZE = 3Private Const DM_IN_BUFFER = 8Private Const DM_OUT_BUFFER = 2Private Const DM_ORIENTATION = &H1Private Const DM_PAPERSIZE = &H2&Private Const DMPAPER_A3 = 8 ' A3 297 x 420 mmPrivate Const DMPAPER_A4 = 9 ' A4 210 x 297 mmPrivate Const PRINTER_ACCESS_ADMINISTER = &H4Private Const PRINTER_ACCESS_USE = &H8Private Const STANDARD_RIGHTS_REQUIRED = &HF0000Private Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or _ PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _(hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)Private Declare Function OpenPrinter Lib "winspool.drv" Alias _"OpenPrinterA" (ByVal pPrinterName As String, phPrinter As _ Long, pDefault As Any) As LongPrivate Declare Function ClosePrinter Lib "winspool.drv" _(ByVal hPrinter As Long) As LongPrivate Declare Function DocumentProperties Lib "winspool.drv" _Alias "DocumentPropertiesA" (ByVal hWnd As Long, ByVal hPrinter As Long, _ByVal pDeviceName As String, pDevModeOutput As Any, pDevModeInput As Any, _ByVal fMode As Long) As LongPrivate Declare Function GetPrinter Lib "winspool.drv" _Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _pPrinter As Any, ByVal cbBuf As Long, pcbNeeded As Long) As LongPrivate Declare Function SetPrinter Lib "winspool.drv" _Alias "SetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _pPrinter As Any, ByVal Command As Long) As LongPrivate Declare Function DeviceCapabilities Lib "winspool.drv" _Alias "DeviceCapabilitiesA" (ByVal lpDeviceName As String, ByVal lpPort As String, _ByVal iIndex As Long, ByVal lpOutput As String, lpDevMode As DEVMODE) As LongFunction SetDefaultPrinterOrientation(ByVal eOrientation As _PrinterOrientationConstants, ByVal strPaperSize As String) As BooleanDim bDevMode() As ByteDim bPrinterInfo2() As ByteDim hPrinter As LongDim lResult As LongDim nSize As LongDim sPrnName As StringDim dm As DEVMODEDim pd As PRINTER_DEFAULTSDim pi2 As PRINTER_INFO_2' Get device name of default printersPrnName = Printer.DeviceName' PRINTER_ALL_ACCESS required under' NT, because we're going to call' SetPrinterpd.DesiredAccess = PRINTER_ALL_ACCESS' Get a handle to the printer.If OpenPrinter(sPrnName, hPrinter, pd) Then' Get number of bytes requires for' PRINTER_INFO_2 structureCall GetPrinter(hPrinter, 2&, 0&, 0&, nSize)' Create a buffer of the required si zeReDim bPrinterInfo2(1 To nSize) As Byte' Fill buffer with structurelResult = GetPrinter(hPrinter, 2, bPrinterInfo2(1), _nSize, nSize)' Copy fixed portion of structure' into VB Type variableCall CopyMemory(pi2, bPrinterInfo2(1), Len(pi2))' Get number of bytes requires for' DEVMODE structurenSize = DocumentProperties(0&, hPrinter, sPrnName, _ 0&, 0&, 0)' Create a buffer of the required si zeReDim bDevMode(1 To nSize)' If PRINTER_INFO_2 points to a DEVMOD E' structure, copy it into our bufferIf pi2.pDevMode ThenCall CopyMemory(bDevMode(1), ByVal pi2.pDevMode, Len(dm))Else' Otherwise, call DocumentProperties ' to get a DEVMODE structureCall DocumentProperties(0&, hPrinter, sPrnName, _bDevMode(1), 0&, DM_OUT_BUFFER)End If' Copy fixed portion of structure' into VB Type variableCall CopyMemory(dm, bDevMode(1), Len(dm))With dm' Set new orientationSelect Case strPaperSizeCase "A3".dmPaperSize = DMPAPER_A3 Case "A4".dmPaperSize = DMPAPER_A4 End Select.dmOrientation = eOrientation.dmFields = DM_ORIENTATION + DM_PAPERSIZE End With' Copy our Type back into bufferCall CopyMemory(bDevMode(1), dm, Len(dm))' Set new orientationCall DocumentProperties(0&, hPrinter, sPrnName, _ bDevMode(1), bDevMode(1), DM_IN_BUFFER Or _ DM_OUT_BUFFER)' Point PRINTER_INFO_2 at our' modified DEVMODEpi2.pDevMode = VarPtr(bDevMode(1))' Set new orientation system-widelResult = SetPrinter(hPrinter, 2, pi2, 0&)' Clean up and exitCall ClosePrinter(hPrinter)SetDefaultPrinterOrientation = TrueElseSetDefaultPrinterOrientation = FalseEnd IfEnd Function''''----------------------------------''''---njx:窗体调用的代码:打印纸选用:1:纵向 2.横向'''SetDefaultPrinterOrientation 2, "A3"''''-----------------------------------1.报表的概念利用报表可以把数据表中的数据按一定的格式输出到屏幕上或打印到纸上。
基于VB的动态报表的设计与实现
fsOp n ” e e t r . e s lc
f m c b” r o x ,
d, b
a Op n tt ,a L c Op i si d e S ai c d o k tmit c W ih fs t r
.
Ad Ne d w
、
Fe s”d)= Fe SrFe s i” id ( ” l z id t.il (h )= l : d” Fe s(w” id 、 l
件 ” 单项 , “ 计 器 ” 项 卡上 单 击 “ a 菜 在 设 选 Dt a R pr” eot把设计器添加到菜单上。 21 . 2为了保证能够全部输 出所有 的字段 。 需要预先添加与相关表中的所有字段数 目对应 的 Tx o eB x控 件 ,并 通 过 属 性 窗 口设 置 好 D  ̄ pr 对象的属性。 a Reo t 22报表控件的数 据绑定 I 直接把数 据报表 ( t pr) 定到一个 Da Reot绑 a 记 录集 对象 中,应该把数 据报表 的 Da S uc t ore a 属性 设置 为记 录集对 象 ,然 后绑定 报表 中的 Tx o et x控件的对应字段名称 。操作步骤如下 : B 2 .创建报表 的数据源 .1 2 在设 计 的报 表对 象 D tR p r 0中定 义 a eo l a t 它的数据源 。选择 D tR pr1 aa eot0的 Iiai 事 nt z i e l 件, 设置 它的 D tSuc aaore属性 为“s , r” 如图 2所
OD t Sr
.
=
lt3 sr
’ 下面语句查 询值 为字符型 , 如果 为 其他类型需要相应变化
.
F ed (Fn Sr1 = lt & ” ” & ils I id t” . sr
用VB实现复杂报表的设计
用VB实现复杂报表的设计科技信息2012年第33期SCIENCE &TECHNOLOGY INFORMATION 报表在各行各业中广泛应用,是信息浏览、分析和打印的有力工具,它是信息集中处理的重要手段。
常见的报表就是用表格、图表等格式来动态显示数据。
报表的主要特点是数据动态化,格式多样化,并且实现报表数据和报表格式的完全分离,用户可以只修改数据,或者只修改格式,使用方便,灵活。
目前,国内外的报表系统种类繁多,功能界面也各具特色,国外的高端报表系统,国内的传统报表系统,都有各自的优缺点,在实际工作中应该根据实际需要选择合适的报表系统。
利用传统的报表系统制作报表维护量较大,一个需求对应一个报表文件,不同的组合则要求制作大量的报表文件,这样就使得开发过程变得极为繁琐,并难以实现用户的不同需求。
在设计复杂数据源的报表时,有时需要人工来转换数据格式,有时则要编写大量代码来将多个数据源转化为一个数据源再使用,有时又使用拼接子报表的方式来实现,但均未能从根本上解决问题,最终严重影响了报表的设计和使用效率。
因此如何快速制作复杂的数据源报表,减轻设计开发的工作量,已经成为报表系统开发的首要问题。
目前,我国的报表系统设计主要是使用Java 和Visual C++设计来实现的传统报表系统,传统报表系统一般是指一些主要以条带式设计为基础的开源软件以及国内的一些仿制产品。
这些报表系统的数学模型都是基于SQL /OLAP 理论设计的,虽然在不断地改进,但处理方案并没有本质的变化,因此无法满足国内复杂报表的制作需求。
目前最常见的报表工具有Excel ,UniversalForms ,Formula One等,国内常见的工具有润乾报表、帆表(FineReport)等。
对这些报表工具的比较和研究,有助于我们完成更好的报表工具的设计。
Excel 是历史最悠久的电子表格程序之一,功能强大,方便好用,后来出现的许多Windows 报表系统都受其影响,甚至在功能或界面都有所模仿。
VBA报表自动生成实例教程
VBA报表自动生成实例教程报表是用于汇总和展示数据的重要工具。
利用VBA(Visual Basic for Applications)可以自动化生成报表,提高工作效率并减少人为错误。
本文将为您提供一个VBA报表自动生成的实例教程,帮助您掌握基本的VBA编程技巧和应用。
第一步:准备数据在使用VBA自动生成报表之前,首先需要准备好需要进行汇总和展示的数据。
打开Excel,并在工作表中输入您的数据。
假设我们有一个销售成绩表格,包括产品名称、销售数量和销售额。
第二步:打开VBA编辑器在Excel中,点击“开发工具”选项卡,然后点击“Visual Basic”按钮,即可打开VBA编辑器。
或者使用快捷键ALT+F11来直接打开VBA编辑器。
第三步:添加模块在VBA编辑器中,可以看到一个“项目资源管理器”窗口。
右键点击“这台电脑”下的项目名称并选择“插入” -> “模块”,以添加一个新的模块。
第四步:编写代码在新的模块中,我们将编写用于生成报表的VBA代码。
以下是一个简单的示例代码:```vbaOption ExplicitSub GenerateReport()Dim wsReport As WorksheetDim wsData As WorksheetDim lastRow As LongDim i As LongDim product As String'设置报表工作表Set wsReport = ThisWorkbook.Sheets("报表")'清空报表工作表的内容wsReport.Cells.Clear'设置数据工作表Set wsData = ThisWorkbook.Sheets("数据")'获取数据工作表最后一行的行号lastRow = wsData.Cells(Rows.Count, 1).End(xlUp).Row'在报表工作表中创建表头With wsReport.Cells(1, 1).Value = "产品名称".Cells(1, 2).Value = "销售数量".Cells(1, 3).Value = "销售额"End With'逐行读取数据并填充报表工作表For i = 2 To lastRowproduct = wsData.Cells(i, 1).Value'检查产品是否已存在于报表中If WorksheetFunction.CountIf(wsReport.Range("A:A"), product) = 0 Then'将新产品添加到报表中wsReport.Cells(wsReport.Cells(Rows.Count,1).End(xlUp).Row + 1, 1).Value = productwsReport.Cells(wsReport.Cells(Rows.Count,1).End(xlUp).Row, 2).Value =WorksheetFunction.SumIf(wsData.Range("A:A"), product, wsData.Range("B:B"))wsReport.Cells(wsReport.Cells(Rows.Count,1).End(xlUp).Row, 3).Value =WorksheetFunction.SumIf(wsData.Range("A:A"), product, wsData.Range("C:C"))End IfNext iEnd Sub```以上代码包含了一系列的操作,使得VBA可以根据数据工作表中的数据自动填充报表工作表。
VB6.0控制EXCEL进行报表设计及打印!
VB6.0控制EXCEL进行报表设计及打印!在工控程序的开发中,经常涉及到数据信息的分析、加工,最终还需把统计结果形成各种形式的报表打印输出。
在Visual Basic中制作报表,通常是用数据环境设计器(DataEnvironment Designer)与数据报表设计器(Data Report Designer),或者使用第三方产品来完成。
但对于大多数习惯于Excel报表的用户而言,用以上方法生成的报表在格式和功能等方面往往不能满足他们的要求。
由于Excel具有自己的对象库,在Visual Basic工程中可以加以引用,通过对Excel使用OLE自动化,可以创建一些外观整洁的报表,然后打印输出。
这样实现了Visual Basic应用程序对Excel的控制。
本文将针对一个具体实例,阐述基于VB和EXCEL的报表设计及打印过程。
1)创建Excel对象Excel对象模型包括了128个不同的对象,从矩形、文本框等简单的对象到透视表,图表等复杂的对象。
下面简单介绍一下其中最重要,也是用得最多的五个对象。
(1)Application对象:Application对象处于Excel对象层次结构的顶层,表示 Excel自身的运行环境。
(2)Workbook对象:Workbook对象直接地处于Application 对象的下层,表示一个Excel工作薄文件。
(3)Worksheet对象:Worksheet对象包含于Workbook对象,表示一个Excel工作表。
(4)Range对象:Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。
(5)Cells对象:Cells对象包含于Worksheet对象,表示Excel 工作表中的一个单元格。
如果要启动一个Excel,使用Workbook和Worksheet对象,下面的代码启动了Excel并创建了一个新的包含一个工作表的工作薄:Dim zsbexcel As Excel.ApplicationSet zsbexcel = New Excel.Applicationzsbexcel.Visible = True如要Excel不可见,可使zsbexcel.Visible = Falsezsbexcel.SheetsInNewWorkbook = 1Set zsbworkbook = zsbexcel.Workbooks.Add2)设置单元格和区域值要设置一张工作表中每个单元格的值,可以使用Worksheet对象的Range属性或Cells属性。
基于VB和EXCEL的报表设计及打印
基于VB和EXCEL的报表设计及打印作者:张翠萍来源:《电脑知识与技术》2011年第28期摘要:针对数据库应用系统中,报表处理的复杂性,提出了基于VB和EXCEL的报表设计及打印的解决方法,同时给出了实现这一功能的源代码。
实验证明,该方法使报表打印更方便和灵活。
关键词:VB;EXCEL;报表中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)28-6807-04Design and Printing of Data Report Based on VB and EXCELZHANG Cui-ping(School of Management, Fujian University of Traditional Chinese Medicine, Fuzhou 3501018, China)Abstract: In the database application system, report processing complexity, proposed based on VB and EXCEL report design and printing solutions, and gives the realization of the source code of this function. Experiments show that, this method makes statements Print more convenient and flexible.Key words: VB; EXCEL; report forms在数据库应用系统的设计过程中,报表的设计是很重要的一个步骤。
如果系统缺乏灵活适用的报表,那无疑会给用户带来不少的麻烦。
Visual Basic6.0是一门可视化语言,它是集应用程序开发、测试和查错功能于一体的集成式开发环境[1]。
它虽然不是专门的数据库语言,但它与其它的数据库语言有良好的兼容性和应用接口,可以方便地与Oracle,Access,SQL Server等多种数据库相连接,并存取其数据生成各种报表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于VB实现复杂报表设计xx[摘要] 本文介绍了报表设计的几种方法和以往报表设计所存在的问题,并以实例介绍自动生成复杂报表的方法。
实例基于VB软件开发,并以word为模板,通过调用access数据库数据自动生成复杂报表。
[关键词]VB;数据库;Word; 复杂报表The Design Of Complex Reports Based VB[Abstract] This paper reports detailed description of several common methods, previous reports of the existence of the problem, and makes use of example to achieve a complex reporting by using of software. The example based on VB software and used word template, to achieve the common complex reporting software through reallocating database.[Key words] VB; Database; Word; Complex Statements1引言报表是人们在日常生活中对某类相关信息进行集中处理的重要手段,是企业信息化不可缺少的部分。
报表在各行各业中应用广泛,是信息浏览、分析和打印的有力工具。
传统报表系统均以国外简单报表模型为基础设计,不能适应复杂报表的开发。
特别是在处理复杂数据源报表时,常常需要编写代码准备数据或进行子报表拼接才能实现。
1.1传统报表系统存在的问题目前,国内外的报表系统种类繁多,功能界面各具特色,对这些报表系统的比较研究,有助于我们设计出更好的报表系统。
国外的报表系统的技术都比较成熟,适合制作样式简单的报表,但一般都为高端产品,价格不菲,并且在处理具有强烈中国特色的报表时,国外产品不仅报表处理能力相当不适应,甚至某些技术也略显落后,例如部分产品不能稳定地在UNIX上部署,只能支持IE浏览器,统计图输出仍采用原始的CGl方式等。
国内的传统报表系统更适合制作复杂的中国式报表,在报表设计和价格等方面国内报表系统也具有一些优势,但国内的报表系统在服务质量和产品本身的品质等方面还存在着一些不足和缺陷,有待进一步的改进和完善。
无论是国外的高端报表系统,还是国内的传统报表系统,每一种报表系统都有各自的优点和缺点,都有各自擅长的领域,在实际工作中应该根据需要选择合适的报表系统。
面对日益复杂的报表开发需求,尤其是复杂的中国式报表,这些报表系统或多或少都有些力不从心,其主要问题表现在以下三个方面:(1) 复杂数据源的处理能力不足。
报表需要从复杂的数据源或者多个不同类型的数据源中获得数据,获得的数据还可能需要统计,格式转换或其他处理,这些需求都是传统报表系统难于实现的。
(2) 报表的可维护性差。
传统的报表系统生成报表的种类固定,使用方便,但很多软件系统无论在实施还是在维护阶段,报表都会进行频繁的新增和修改,而传统的报表系统缺乏无编码定制能力,系统扩展网难。
一旦用户对报表样式的需求发生改变,就会给软件维护带来许多不必要的麻烦。
(3) 报表保存格式的通用性较差。
报表保存格式不统一,保存格式理解困难,各种报表工具各自为政,报表模板无法兼容,行业也没有形成统一的标准,一旦用户选定了某一报表工具就意味着要一直使用。
如果不幸选择失误,已经做的工作都要重新再来。
总之,利用传统的报表系统制作报表维护量相当大,一个需求对应一个报表文件,不同的组合要求制作大量的报表文件,使得开发过程变得极为繁琐,难以实现用户的需求。
在设计复杂数据源的报表时,或者需要人工转换数据格式,或者要编写大量代码将多个数据源运算成为一个数据源再使用,或者使用拼接子报表的方式来实现,但都没有从根本上解决问题,严重影响报表的设计和使用效率。
因此如何快速制作符合多层结构特点的复杂数据源报表,减轻开发工作量,已经成为报表系统开发的重要问题。
在计算机出现之前,数据需要以纸制文件等形式保存,数据处理是手工进行的,报表的编制也是手工实现的。
随着计算机的广泛应用,人们开始使用计算机及计算机软件实现数据处理,使用数据库管理系统来管理数据,使用应用程序来完成具体的业务操作,报表的编制也开始使用软件来实现。
完成报表编制工作的软件程序称为报表系统或者报表工具。
报表系统的产生改变了报表编制的流程、方法以及编制手段。
报表是信息管理系统中各种数据信息的最终输出结果,是其重要的组成部分。
在信息管理系统的开发过程中,软件设计人员常常需要设计大量的报表,其中相当一部分报表的结构比较类似,需要软件设计人员逐一定义每一个报表的报表对象、数据模型、显示格式等属性,同时还可能对数据存储、导入和导出等操作带来诸多不便,这些繁琐的重复性工作常常花费软件设计人员、操作人员、维护人员大量的精力和时间,影响系统的开发、使用效率。
同时,报表还是信息管理系统中变化性很强的部分。
应用系统交付用户后,随着时间的推移,用户可能需要新的报表,报表的格式、报表的数据要求都有可能发生变化,用户的各种各样的报表要求,仅依靠应用系统预先提供的报表是很难实现的。
从报表系统的发展历史来看,在应用系统进入数据共享的时候,比较专业的报表系统或控件就出现了,并且一直沿用至今。
这些工具的理论模型和需求都出自于国外的需求,这种模型和需求比较符合国外用户的使用习惯,比较适合设计制作样式非常规整,没有表格线,没有斜线表头和分层分组的简单报表。
然而中国人的报表习惯与国外用户存在很大差别,中国的报表也比国外的报表复杂许多。
报表是由“报’’和“表"两部分组成,“报”指数据的汇总统计,即将数据从数据库中取出按一定规则运算统计后排列。
“表”则指格式,数据需要放在单元格中,才能清楚定位,体现数据之间的层次与对应关系。
目前市场上的报表系统大致分为两类,一类基本上能把数据库的数据取出来运算排列制作出动态的报表。
但其格式设计功能不好,一般是采用控件拖放的方式编辑报表,靠一个个矩形边线重合对齐绘制表格,一条直线要拼接多条线段,而且还和分辨率相关,打印出来不整齐。
还有一类仿制Excel的产品,合并单元格、添加边框非常方便,可以快捷地设计出一个复杂格式的报表。
但它们的缺点是数据处理能力太弱,除了简单的格内运算外,与数据库打交道的过滤、分组等统计运算都需要编程实现。
中国报表最困难的地方是数据统计。
中国报表具有的多数据源、整表规则分片、不完全划分、跨行组运算及独立格间运算、行列对称等特征,是传统报表系统无法满足的,常常导致要求编写代码准备数据或拼接子报表才能完成一个复杂报表的制作。
表样格式复杂也是中国报表比较麻烦的地方,中国报表均要求有整齐的表格线,多层表头层次分明。
业内有名的报表系统一般采用控件式拖拽的绘制方案,制作表格非常烦琐,且还与分辨率相关,屏幕与打印不一致,而中国报表对打印样式要求向来很高。
中国报表还会有填写的需求,前端需要支持各种填写控制,如编辑风格、自动计算、合法性校验等;填写好的数据能够方便地写入数据库以进行下一步的统计汇总。
而很多报表软件不支持填写能力,一般的填报解决方案都不能自动处理数据入库的问题,导致相应的编程工作量仍然很大。
1.2国内外研究现状大部分通用软件领域,国外产品都要相对优秀。
早期的报表系统软件是由国外的公司和研究机构设计实现的,适合制作样式非常规整,没有格线,表头简单的国外报表。
国外的报表系统都具有各自的原创技术,又经过了多年的发展和完善,其技术相对都比较成熟,但是国外的报表系统在报表样式绘制方面的能力比较弱,在价格上一般都比较昂贵,所以经常被称作高端产品。
例如挪威QuSoR公司专门为Delphi编写的QuickRepon报表组件,使用QuickReport可以迅速设计出符合西方人习惯的报表,从功能和设计上来说,不失为一个较好的报表设计工具,但对于报表设计的灵活性,及在程序编译完毕后用户对报表的可修改性等方面还远远不能满足用户的需要。
国外典型报表系统中,著名的有Excel,Cwstal Report,Fo彻ula One等,随着.NET 技术的不断发展,近年来国外已经出现了一些基于.NET环境的报表系统,例如MicrosoR的Reporting Services技术,Ⅵsual Studio 2005集成的报表解决方案,C搿stal Reports f1叫Visual Studio.NET,Developer Express公司开发的X仃aReports报表组件和ComponentOne公司开发的C 1 Reports报表组件等等。
其中MicrosoR的Reportillg Services 技术是基于服务器的报表解决方案,可以用来创建和管理包含关系数据源和多维数据源中的数据的表格、矩阵、图形和自由格式的报表,并可通过网络连接来查看和管理报表。
Reporting Services在报表的制作、分发和报表数据的安全性等方面都有很好的表现,功能比较全面,但是需要微软众多企业级解决方案的支持,并且价格相当昂贵。
国内的报表系统主要是使用Java和Visual C++设计实现的传统报表系统,传统报表系统是指一些主要以条带式设计为基础的开源软件以及国内的一些仿制产品。
这些报表系统的数学模型都是基于SQL/OLAP理论设计的,虽然不断地进行改进,但根本处理方案并没有本质的变化,远远不能满足国内复杂报表的制作需求。
近年来不断推出的新版本以及新报表系统都只是在技术上改进,如从C/S移植到B/S、支持JaVa等,而理论模型仍是原来的传统方式,所以仍然算是传统报表系统。
传统报表系统最显著的特征是主编辑画面呈条带状,以模拟SQL中的seIect和Group运算;大部分报表系统采用繁琐的拖拽式编辑(有个别报表系统开始采用方便的表格式);交叉表要采用专门的类OLAP模型处理,样式和运算都比较死板。
国内比较有名的报表系统基本上都是Java报表系统,主要有用友华表(Cell)和润乾报表等。
润乾报表是一个功能非常强大的纯Java报表产品,各方面都很出色,其新一代报表模型采用了革命性的多源分片、不规则分组、动态格间运算、行列对称等技术,能设计实现很多原来传统报表系统中很复杂,甚至很难实现的报表。
但是由于润乾报表设计方式完全依赖手写表达式,对于没有编程基础的普通用户来说,学习使用润乾报表的难度较大。
1.3常见的典型报表工具及其介绍目前常见的典型报表工具中,著名的有Excel,UniversalForms,Oracle9i Reports,Formula One等,国内也推出了许多报表工具。