在vb中如果打印报表(包括预览)用什么工具最好?

时间:2022-11-28 06:21:21
我原来用报表生成器等来做,但也许由于我技术不精,有好多情况处理不了, 只好用printer对象来一笔一划来做报表,用picture对象来做预览,好辛苦!!!:(

谁能告诉我在vb中如果打印报表(包括预览)用什么工具最好?
:灵活,强大,易于控制细节,封闭表格等等。

22 个解决方案

#1


activereport

#2


你好,activereport 可以实现这么多的功能吗? 有没有不是Demo的下载?谢谢!

#3


用F1BOOK控件。

#4


songyl你好!目前我也面临一个和你相同的问题,前两天在网上查找资料时找到一篇调用EXCEL打印报表的文章,不知道对你的软件是否适用。因为这要求用户先安装好excel,而且要自已做一个报表的模版,用起来不太方便,如果你有更好的方法希望能告诉我。谢谢.

#5


我推荐f1book

#6


水晶报表还可以吧。。功能不是很强!

#7


我这几天用了一下vb中的datareport,感觉也挺好用的,只要在显示报表前,动态修改报表内容,一般的报表也能对付了,我刚做了几个,还可以。

#8


如VSPrintView控件吧,我用过,还不错的

#9


我最近也在作这项工作,找了几篇资料,转贴出来大家分享:

                              增强VB的报表制作功能
 
  
VB for Windows 4.0软件(专业版)中包含一个报表制作软件—Crystal Report简版,该软件是一个功能强大的报表制作系统,但因其版本低而且是简本,功能受到一定的限制。下面介绍Crystal Report 4.0增强VB报表功能的方法及使用。

1Crystal Report 4.0更新VB的方法

Crystal Report 4.0更新VB,只需要覆盖VB报表子目录下的一些文件,例如Crystal Report 4.0安装在缺省目录“C:\CRW”,VB报表的子目录为“ C:\VB\REPORT”,文件更新和替换步骤为:

(1)更新CRW.EXE 和CRW.HLP

copy c:\crw\crw.exe c:\vb\report

copy c:\crw\crw.hlp c:\vb\report


(2)增加文件CRSUPREG.DLL和文件CRSUPPRT.DLL

copy c:\crw\crsupreg.dll c:\vb\report

copy c:\crw\crsupprt.dll c:\vb\report

Crystal Report版本更新后,在VB编程环境下,激活菜单“Windows/Report Designer”,可以启动新版的Crystal Report。

(3)Crystal.vbx文件更新

2CRPE.DLL的使用

Crystal Report动态链接库CRPE.DLL能够在应用程序中调用Crystal Report的报表模块,实现与Crystal Report相同的报表功能,CRPE.DLL支持的语言有C、C++、VB、VC、Delphi等,下面介绍VB调用CRPE.DLL的方法。

Declare Function PEOpenPrintJob Lib “CRPE.DLL”(ByVal RptName$)As Integer

Declare Function PEClosePrintJob Lib “CRPE.DLL”(ByVal PrintJob$)As Integer

其中PEOpenPrintJob函数开始报表打印工作,PEClosePrintJob子程序关闭报表打印工作。在调用时注意指明CRPE.DLL所在的路径,如“C:\CRW\CRPE.DLL”。函数和子程序的声明比较严格,容易出现错误,在编辑时采用下面两种方法中的任意一种简化声明工作。

(1)在工程文件(MAK)中,包含文件GLOBAL.BAS,该文件在目录“C:\CRW”下。

(2)在某一编辑器中打开文件GLOBAL.BAS,把需要的声明块拷贝到剪贴板上,然后进入VB编程环境中,使用PASTE命令将剪贴板中的内容粘贴到VB程序中。

Crystal Reports提供了一个例程CRPEDEMO.MAK,介绍这些函数和子函数的使用方法。下面的事件过程Command1_Click()直接向屏幕输出报表ORDERS.RPT。

Sub Command1_Click()

result% = PEPrintReport(″c:\CRW\CODERS.RPT ″, 0, 1, ″报表输出演示″, CW - USED

EFAULT, CW - USEDEFAULT, CW - USEDEFAULT, CW - USEDEFAULT, 0, 0)

If result% <> 0 Then MsgBox (″报表不能输出″)

End Sub

函数PEPrintReport是一个非常实用的函数,它不需要调用其它任何函数,直接输出(向打印机或屏幕)已形成的报表。

3报表控件属性设置

Crystal Report 4.0提供的Crystal.vbx的属性更加容易控制。下面的实例介绍了程序在运行时更改CrystalReport控件属性的方法。

Sub Commmand1_Click()

Main.Reportl.CopiesToPrinter = Copies.Text  ′设置报表调用份数

Main.Reportl.DetailCopies = NDetailCopies.Text   ′设置节中调用份数

If Collate.Value = True Then

Main.Reportl.PrintCollation = 1  ′设置是否进行打印份数检验

Else

Main.Reportl.PrintCollation = 0

End If

If StartPage.Tcxt = “”Then

Main.Reportl.PrinterStartPage = 0   '设置打印报表的起始页

Else

Main.Reportl.PrinterStartPage = StartPage.Text

End If

If EndPage.Tcxt = “”Then

Main.Reportl.PrinterStopPage = 0 '设置打印报表的中止页

Else

Main.Reportl.PrinterStopPage = StopPage.Text

End If

If SaveData.Value = True Then

Main.Reportl.DiscardSaveData = False   '确定是否存储报表数据

Else

Main.Reportl.DiscardSaveData = True

End If

Main.Reportl.Destination= 1 '输出设置(打印机)

End Sub

使用Crystal Report 4.0,会给用户创建表格和编写程序带来极大的方便,读者不妨一试。




                            利用VB设计打印复杂报表 


                                   方云波 

---- 数据库管理系统的开发人员经常感叹的一个问题就是:我们中国人的报表太复杂了!无规则、嵌套、斜线、交叉线等历来都是困挠开发人员的最大问题。设计一个数据库固然有一定的技巧,设计数据操作也固然需要一定的逻辑分析能力,但这些问题对一般的开发人员来说应该是不成为问题的。用户可是不管你采用了多么灵活的算法多么方便的操作,他们最感兴趣的是最后他们出来的报表如何漂亮,出报表的操作如何简单(最好是一个按钮解决所有的问题)。笔者在开发数据库管理系统方面也稍有些经验,从FoxPro、Delphi、PowerBuilder一直到现在用的VB,都遇到过设计打印报表的问题,这些软件在设计报表的过程中可谓各有千秋,我这里不一一细说。我在这里只向大家介绍一种我迄今为止最为满意的一种设计打印报表的方法:利用VB操作EXCEL来生成复杂的报表。 

---- 一. 用VB创建外部EXCEL对象 

---- 大多数大型 ActiveX-enabled 应用程序和其它 ActiveX 部件,在它们的对象层次中都提供了一个顶层外部可创建对象。该对象提供了对该层次中其它对象的访问,并且还提供对整个应用程序起作用的方法和属性。 

---- 例如,每个 Microsoft Office 应用程序提供一个顶层 Application 对象。下面语句显示了对Microsoft Excel的 Application 对象的引用: 


Dim xlApp As Excel.Application
Set 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是一个非常优秀的创建报表的工具。它提供的单元格任意合并、拆分和绘图功能基本上能够满足设计所有复杂报表的需求。它对任意一个单元格的格式随意控制,更为随心所欲地设计报表提供了强大的支持。 

---- 根据用户提供的报表,我们可以很快在EXCEL里生成模版文件。所谓生成模版文件只是为了满足用户多方面的需求而设计的。也是为了适合报表以后的更改而做的一点预备工作。例如用户需要打印几百张职工履历表,但其格式都是一致的,并且随着时间和实际情况的变化,表格格式有可能需要改变,我们设计一个模版文件显然可以“以不变应万变”了。 

---- 生成工作表时我们应当记录下要填充内容的单元格编号和该单元格内要填充的数据字段。这样形成一个表格,在写程序时一目了然。如: 


Cell(4,2) 职工姓名 Cell(6,6) 毕业学校
Cell(4,4) 职工性别 Cell(6,7) 所学专业
Cell(4,6) 职工民族 Cell(6,9) 工作时间
(表一)

---- 在程序里我们当然不要对模版文件进行操作了,我们只需要对模版文件的一个拷贝进行操作就行(这也是我们设计模版文件的一个目的和好处)。如下面的例子: 


 Dim strSource, strDestination As String
 strSource = App.Path & "\Excels\RegisterFee.xls"  
‘RegisterFee.xls就是一个模版文件
 strDestination = App.Path & "\Excels\Temp.xls"  
 FileCopy strSource, strDestination 
 ‘将模版文件拷贝到一个临时文件

---- 三. 生成工作表内容 

---- 有了上述两步工作的铺垫,我们下面接着就只要根据(表一)的格式给各单元格赋值了。如: 


  datPrimaryRS.Recordset.MoveFirst 
 ‘datPrimaryRS为Data控件
    If IsNull(datPrimaryRS.Recordset!姓名) = False Then
    xlSheet.Cells(4, 2) = datPrimaryRS.Recordset!姓名
    End If
    If IsNull(datPrimaryRS.Recordset!性别) = False Then
    xlSheet.Cells(4, 4) = datPrimaryRS.Recordset!性别
    End If
    If IsNull(datPrimaryRS.Recordset!民族) = False Then
    xlSheet.Cells(4, 6) = datPrimaryRS.Recordset!民族
    End If
 ………………

---- 四. 打印报表 

---- 生成了工作表后,就可以对EXCEL发出打印指令了。 

---- 注意在执行打印操作之前应该对EXCEL临时文件执行一次保存操作,以免在退出应用程序后EXCEL还提示用户是否保存已修改的文件,让用户觉得莫名其妙。如下语句: 


 xlBook.Save  ‘保存文件
    xlSheet.PrintOut  ‘执行打印
    xlApp.Quit  ‘退出EXCEL

---- 至此读者应该看到,我们设计的报表打印是通过EXCEL程序来后台实现的。用户根本看不到具体过程,他们只看到一张张漂亮的报表轻易地被打印出来了。




                              用数据报表设计器创建报表

                                      ☆ 陶杨

  数据环境设计器(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)对象:命令对象定义了从数据库连接中将取回什么数据的详细信息。命令对象可基于任何一个数据库对象(表、视图、存储过程或同义字)或是一个SQL查询。

三、数据报表对象
  数据报表设计器包括以下几个对象:

1. 数据报表(Data Report)对象:类似于Visual Basic表单,它包含一个可视化设计器和一个代码模块。设计器用来创建报表的布局,也可以往设计器的代码模块里添加代码,用程序对包含在设计器里的控件或区域进行控制。 
2. 区域(Section)对象:数据报表设计器的每一个区域均由一个区域集对象中的一个区域对象来表示。在设计阶段,每一个区域都有一个标题,若要选择区域,只需用鼠标选择标题即可,并且在区域内可布置控件。在报表建立之前,使用区域对象及其属性调整报表。使用过报表的人都知道,报表可分为报头、报脚、页头、页脚、组头、组脚和细节等部分,在区域内也是一样的。

3. 数据报表控件:这些控件只能与Data Report designer(数据报表设计器)一起使用(注意:在数据报表设计器内不能使用Visual Basic的标准控件或者任何其他的ActiveX控件)。这些控件位于Visual Basic工具箱上的“DataReport”标签内。由于这些控件外观及功能与Visual Basic某些标准控件很类似,所以不再单独讲述。

四、一个实例
  我们使用Data Environment designer(数据环境设计器)作为数据报表的数据源,由Visual Basic自带的NWind.mdb数据库提供数据,设计一个简单的报表。设计好的报表如图1所示。

1. 创建数据环境设计器
(1)创建一个新的标准EXE工程文件。
(2)在工程菜单上,选择添加数据环境。如果在工程菜单中没有列出这一项,那么选择组件—设计器标签—选中数据环境,选择确定。
(3)在数据连接属性对话框中,选择Microsoft Jet 3.51 OLE DB Provider。
(4)选择“下一步”按钮,这样就进入了Connection标签。
(5)选择第一个文本框旁的“...”按钮。
(6)在存取数据库对话框中浏览并选择数据库文件Nwind.mdb。
(7)选择“确定”关闭该对话框。
(8)用鼠标右击Connection1图标,然后选择Rename,将名字改为Northwind。
(9)用鼠标右击Northwind图标,然后选择Add Command,再用鼠标右击Command1,选择“属性”命令,弹出属性对话框,在对话框中,按下表所示设置属性值。
Command Name
Customers
Connection
Northwind
DataBase Object
Table
Object Name
Customers 

(10)选择“确定”关闭该对话框。
(11)用鼠标右击Customers命令,选择Add Child Command,再用鼠标右击Command1,选择“属性”命令,弹出属性对话框,在对话框中,按下表所示设置属性值。
Command Name
Orders
Connection
Northwind
DataBase Object
Table
Object Name
Orders
(12)选择Relation标签,选中Relate to a Parent Command Object检查框。在Parent下拉框中选中Customers;Parent域和Child域中均已包含了CustomerID。
(13)选择添加,按“确定”关闭对话框。
(14)在属性窗口中按下表设置工程文件和设计器的属性值,然后保存工程文件。
Project Name
prjNwind
DataEnvironment Name
deNwind
Form Name
frmShowReport

2. 创建数据报表
  一旦创建了数据环境设计器,就可以创建一个数据报表了。由于不是所有在数据环境设计器内的字段都会用于设计报表,因此下面的过程只创建了一个显示几个字段的报表。

创建一个新报表的步骤如下: 
(1)在工程菜单上,选择Add Data Report命令,Visual Basic会在工程中添加一个新的数据报表。
(2)在属性窗口中按下表设置数据报表的属性。
Name
rptNwind
Caption
Northwind Data Report 

(3)在属性窗口中,将DataSource设置为deNwind,DataMember设置为Customers。
(4)用鼠标右击数据报表设计器,选择Retrieve Structure。
(5)用鼠标将数据环境设计器的CompanyName字段(在Customers命令下)拖放到组标题为Customers_Header的区域。
(6)删除标签控件Label1。
(7)用鼠标将数据环境设计器的OrderDate字段(在Orders命令下)拖放到Orders_Detail区域,并删除标签控件。
(8)调整数据报表设计器的各个区域,如图2所示。
(9)保存工程文件。

3. 用Show方法预览数据报表
  现在数据环境和数据报表对象都已建立,可以准备运行程序了。我们要做的最后一件事情就是编写代码以显示数据报表。
(1)在工程浏览器窗口中,用鼠标双击frmShowReport以显示表单设计器。
(2)在工具箱上,点击General标签。
(3)点击CommandButton图标,然后在表单上画一个命令按钮。
(4)在属性窗口中按下表设置命令按钮控件的属性。
Name
cmdShow
Caption
Show Report
(5)在按钮事件中,键入以下代码:
Private Sub cmdShow_Click()
rptNwind.Show
End Sub
(6)保存并运行工程文件。
点击Show Report以打印预览模式显示报表。


#10


CrystaIReports for VB5报表编程经验

 
  由于VB5本身无报表输出工具,因此在开发VB5数据库应用系统时,必须用第三方报表书写器,通常采用VB5的企业版附带的Crystal Reports。在开发时不注意两者的连接关系,经常会出现意想不到的问题,下面是笔者在开发VB5系统中的几点经验:
  1.报表控件的引入
  Crystal Reports不是VB5标准控件,而是Active X控件。使用时,首先要点击“工程→引用”菜单,引出部件窗口,再选Crystal Reports Control 4.6控件。
  2.报表制作
  现象:报表设计时文字已排列整齐,但预览或打印往往出现偏差。
  措施:表名及列头文字不要直接输入文本,而改用“Insert→Text Field”菜单插入文本字段,就可避免以上现象。
  3.数据输出
  现象:在数据输出时易犯错误,是因为在VB5中用SQL语句进行查询,然后打印,目的是想把查询结果输出到报表上,但结果往往仍然是原表中的数据。也就是说Crystal Reports并不认VB5的查询。
  措施:建一个临时表,查询先前删除表中的数据,再把查询结果放入到临时表,再进行预览或打印。
  4.报表控件的使用及路径的指定
  现象:在一个表单中,如果需输出多个报表,放置多个报表控件。打印时会出现“堆栈溢出”这样的致命错误。另外发布给用户时,需要设定任意路径,如果只指定报表名路径,也会出现错误。
  措施:如果在一个表单上要打印多个报表,在打印时先定义数据文件名和报表名,再打印。打印前设定时,不仅要设定报表文件路径,而且还要设定数据库的路径。
  CrystalReport1.datafile(index)=App.path & “数据库名”
  CrystalReport1.reportfilename=App.path & “报表文件名”  
  5.设定预览窗口
  现象:预览窗口太小,用户必须点击最大化按钮才能覆盖整个屏幕。
  措施:
  CrystalReport1.WindowHeight=screen.Height
  CrystalReport1.WindowsHeight=screen.Windth
  CrystalReport1.WindotTop=0
  CrystalReport1.WindowLeft=0
  或者用:
  CrystalReport1.Windo 
wState=crptM
aximized (江苏 徐静文)


本文出自:《电脑报》1999年01月04日第1期
 

#11


另外你还可以看一下电子工业出版社《用Visual Basic 访问数据库》(Jeffrey P. McManus著,罗四维 韩臻 等译)的第四章:报表与数据输出,里面讲了许多种方法。

#12


songyl: 快给分呐!

#13


songyl:太没意思了。

#14


用VsPrinter.Ocx吧,控制比Picture灵活得多。www.videosoft.com下有。用ActiveFree破解。

#15



bestbestbest:对不起,这两天因为忙没有上网,没想到你急成这样,就冲着你拿了这么多的文章,我也会给你20分的,少不了你的!最后一块儿给行吗?

不过我的问题还基本没有解决,我用datareport来做非中国式报表还可以,中国式的封闭表格我就做不出来了,你知道吗?封闭表格我就准备用Excel来结决,但是,我在程序中怎么也改不了一行的宽度,其他倒是没有问题了。我再加50分,如果你解决了,我再给你80分,满意了吧!  

其他高手也来帮帮我吧!!! :< 

#16


我建议使用Crystal Report 7.0 ,功能极其强大!

#17


songyl老弟:消消气,听我说!

你不是会用DataReport吗,我劝你试试ActiveReports(版本1.1,有破解文件)吧,使用方法很相近,保证可以制作你要的中国式报表,我当然知道该怎么做。另外Crystal Reports(版本8.0,有破解/汉化文件,但是有32M)也可以。

使用Excel制作报表,需要安装Office;而且根据经验,还有可能出现不兼容Office2000的现象(猜想)。如果你非要用Excel的效果,我建议你用Videosoft的VsFlexGrid7.0 + VsView7.0

#18


bestbestbest:
请问Crystal Reports8.0(有破解/汉化文件)在哪儿可以下载。

#19


town:
Crystal Reports Report Designer Component 8 (RDC)(32M)——http://ftp.img.seagatesoftware.com/webprod/scrvbasic/EN/rdc8.exe
Reporting Resource Kit (1.1M)——http://ftp.img.seagatesoftware.com/webprod/scrvbasic/EN/kit8.zip
破解汉化机——http://go.163.com/~activex/file/patch-crdc8.zip
另外Seagate的Crystal Reports主页——http://www.seagatesoftware.com/products/crystalreports/rdc/content.asp

加起来一共33.7M,可要悠着点下载。

#20


town:

Crystal Report Designer Component 8.0 解密过程:
1)在安装过程中输入下列注册码——
keycode:6M-300019W-D048000-0000000
Registration Number:1231467890
2)运行patch-crdc8.exe即可.

注意:解除了30天限制时间,对发布给最终用户界面进行了汉化,因汉化文件涉及到\Program Files和\WINDOWS两个目录,所以在运行patch-crdc8.exe时,一般不要修改"应用WinPatch文件的文件夹"下面的文本框中的内容.

#21


用 ActiveReport 吧, 如果你完全掌握了他的精髓, 你会发现他的强大是任何其他
Report 控件难以比拟的.
至于画中国表格, 可以使用动态添加方式, 表格栏数, 行数可以任意, 
斜线, 合并单元更是易如反掌.

#22


to bestbestbest
能不能说说您的制作打印模板的经验?

#1


activereport

#2


你好,activereport 可以实现这么多的功能吗? 有没有不是Demo的下载?谢谢!

#3


用F1BOOK控件。

#4


songyl你好!目前我也面临一个和你相同的问题,前两天在网上查找资料时找到一篇调用EXCEL打印报表的文章,不知道对你的软件是否适用。因为这要求用户先安装好excel,而且要自已做一个报表的模版,用起来不太方便,如果你有更好的方法希望能告诉我。谢谢.

#5


我推荐f1book

#6


水晶报表还可以吧。。功能不是很强!

#7


我这几天用了一下vb中的datareport,感觉也挺好用的,只要在显示报表前,动态修改报表内容,一般的报表也能对付了,我刚做了几个,还可以。

#8


如VSPrintView控件吧,我用过,还不错的

#9


我最近也在作这项工作,找了几篇资料,转贴出来大家分享:

                              增强VB的报表制作功能
 
  
VB for Windows 4.0软件(专业版)中包含一个报表制作软件—Crystal Report简版,该软件是一个功能强大的报表制作系统,但因其版本低而且是简本,功能受到一定的限制。下面介绍Crystal Report 4.0增强VB报表功能的方法及使用。

1Crystal Report 4.0更新VB的方法

Crystal Report 4.0更新VB,只需要覆盖VB报表子目录下的一些文件,例如Crystal Report 4.0安装在缺省目录“C:\CRW”,VB报表的子目录为“ C:\VB\REPORT”,文件更新和替换步骤为:

(1)更新CRW.EXE 和CRW.HLP

copy c:\crw\crw.exe c:\vb\report

copy c:\crw\crw.hlp c:\vb\report


(2)增加文件CRSUPREG.DLL和文件CRSUPPRT.DLL

copy c:\crw\crsupreg.dll c:\vb\report

copy c:\crw\crsupprt.dll c:\vb\report

Crystal Report版本更新后,在VB编程环境下,激活菜单“Windows/Report Designer”,可以启动新版的Crystal Report。

(3)Crystal.vbx文件更新

2CRPE.DLL的使用

Crystal Report动态链接库CRPE.DLL能够在应用程序中调用Crystal Report的报表模块,实现与Crystal Report相同的报表功能,CRPE.DLL支持的语言有C、C++、VB、VC、Delphi等,下面介绍VB调用CRPE.DLL的方法。

Declare Function PEOpenPrintJob Lib “CRPE.DLL”(ByVal RptName$)As Integer

Declare Function PEClosePrintJob Lib “CRPE.DLL”(ByVal PrintJob$)As Integer

其中PEOpenPrintJob函数开始报表打印工作,PEClosePrintJob子程序关闭报表打印工作。在调用时注意指明CRPE.DLL所在的路径,如“C:\CRW\CRPE.DLL”。函数和子程序的声明比较严格,容易出现错误,在编辑时采用下面两种方法中的任意一种简化声明工作。

(1)在工程文件(MAK)中,包含文件GLOBAL.BAS,该文件在目录“C:\CRW”下。

(2)在某一编辑器中打开文件GLOBAL.BAS,把需要的声明块拷贝到剪贴板上,然后进入VB编程环境中,使用PASTE命令将剪贴板中的内容粘贴到VB程序中。

Crystal Reports提供了一个例程CRPEDEMO.MAK,介绍这些函数和子函数的使用方法。下面的事件过程Command1_Click()直接向屏幕输出报表ORDERS.RPT。

Sub Command1_Click()

result% = PEPrintReport(″c:\CRW\CODERS.RPT ″, 0, 1, ″报表输出演示″, CW - USED

EFAULT, CW - USEDEFAULT, CW - USEDEFAULT, CW - USEDEFAULT, 0, 0)

If result% <> 0 Then MsgBox (″报表不能输出″)

End Sub

函数PEPrintReport是一个非常实用的函数,它不需要调用其它任何函数,直接输出(向打印机或屏幕)已形成的报表。

3报表控件属性设置

Crystal Report 4.0提供的Crystal.vbx的属性更加容易控制。下面的实例介绍了程序在运行时更改CrystalReport控件属性的方法。

Sub Commmand1_Click()

Main.Reportl.CopiesToPrinter = Copies.Text  ′设置报表调用份数

Main.Reportl.DetailCopies = NDetailCopies.Text   ′设置节中调用份数

If Collate.Value = True Then

Main.Reportl.PrintCollation = 1  ′设置是否进行打印份数检验

Else

Main.Reportl.PrintCollation = 0

End If

If StartPage.Tcxt = “”Then

Main.Reportl.PrinterStartPage = 0   '设置打印报表的起始页

Else

Main.Reportl.PrinterStartPage = StartPage.Text

End If

If EndPage.Tcxt = “”Then

Main.Reportl.PrinterStopPage = 0 '设置打印报表的中止页

Else

Main.Reportl.PrinterStopPage = StopPage.Text

End If

If SaveData.Value = True Then

Main.Reportl.DiscardSaveData = False   '确定是否存储报表数据

Else

Main.Reportl.DiscardSaveData = True

End If

Main.Reportl.Destination= 1 '输出设置(打印机)

End Sub

使用Crystal Report 4.0,会给用户创建表格和编写程序带来极大的方便,读者不妨一试。




                            利用VB设计打印复杂报表 


                                   方云波 

---- 数据库管理系统的开发人员经常感叹的一个问题就是:我们中国人的报表太复杂了!无规则、嵌套、斜线、交叉线等历来都是困挠开发人员的最大问题。设计一个数据库固然有一定的技巧,设计数据操作也固然需要一定的逻辑分析能力,但这些问题对一般的开发人员来说应该是不成为问题的。用户可是不管你采用了多么灵活的算法多么方便的操作,他们最感兴趣的是最后他们出来的报表如何漂亮,出报表的操作如何简单(最好是一个按钮解决所有的问题)。笔者在开发数据库管理系统方面也稍有些经验,从FoxPro、Delphi、PowerBuilder一直到现在用的VB,都遇到过设计打印报表的问题,这些软件在设计报表的过程中可谓各有千秋,我这里不一一细说。我在这里只向大家介绍一种我迄今为止最为满意的一种设计打印报表的方法:利用VB操作EXCEL来生成复杂的报表。 

---- 一. 用VB创建外部EXCEL对象 

---- 大多数大型 ActiveX-enabled 应用程序和其它 ActiveX 部件,在它们的对象层次中都提供了一个顶层外部可创建对象。该对象提供了对该层次中其它对象的访问,并且还提供对整个应用程序起作用的方法和属性。 

---- 例如,每个 Microsoft Office 应用程序提供一个顶层 Application 对象。下面语句显示了对Microsoft Excel的 Application 对象的引用: 


Dim xlApp As Excel.Application
Set 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是一个非常优秀的创建报表的工具。它提供的单元格任意合并、拆分和绘图功能基本上能够满足设计所有复杂报表的需求。它对任意一个单元格的格式随意控制,更为随心所欲地设计报表提供了强大的支持。 

---- 根据用户提供的报表,我们可以很快在EXCEL里生成模版文件。所谓生成模版文件只是为了满足用户多方面的需求而设计的。也是为了适合报表以后的更改而做的一点预备工作。例如用户需要打印几百张职工履历表,但其格式都是一致的,并且随着时间和实际情况的变化,表格格式有可能需要改变,我们设计一个模版文件显然可以“以不变应万变”了。 

---- 生成工作表时我们应当记录下要填充内容的单元格编号和该单元格内要填充的数据字段。这样形成一个表格,在写程序时一目了然。如: 


Cell(4,2) 职工姓名 Cell(6,6) 毕业学校
Cell(4,4) 职工性别 Cell(6,7) 所学专业
Cell(4,6) 职工民族 Cell(6,9) 工作时间
(表一)

---- 在程序里我们当然不要对模版文件进行操作了,我们只需要对模版文件的一个拷贝进行操作就行(这也是我们设计模版文件的一个目的和好处)。如下面的例子: 


 Dim strSource, strDestination As String
 strSource = App.Path & "\Excels\RegisterFee.xls"  
‘RegisterFee.xls就是一个模版文件
 strDestination = App.Path & "\Excels\Temp.xls"  
 FileCopy strSource, strDestination 
 ‘将模版文件拷贝到一个临时文件

---- 三. 生成工作表内容 

---- 有了上述两步工作的铺垫,我们下面接着就只要根据(表一)的格式给各单元格赋值了。如: 


  datPrimaryRS.Recordset.MoveFirst 
 ‘datPrimaryRS为Data控件
    If IsNull(datPrimaryRS.Recordset!姓名) = False Then
    xlSheet.Cells(4, 2) = datPrimaryRS.Recordset!姓名
    End If
    If IsNull(datPrimaryRS.Recordset!性别) = False Then
    xlSheet.Cells(4, 4) = datPrimaryRS.Recordset!性别
    End If
    If IsNull(datPrimaryRS.Recordset!民族) = False Then
    xlSheet.Cells(4, 6) = datPrimaryRS.Recordset!民族
    End If
 ………………

---- 四. 打印报表 

---- 生成了工作表后,就可以对EXCEL发出打印指令了。 

---- 注意在执行打印操作之前应该对EXCEL临时文件执行一次保存操作,以免在退出应用程序后EXCEL还提示用户是否保存已修改的文件,让用户觉得莫名其妙。如下语句: 


 xlBook.Save  ‘保存文件
    xlSheet.PrintOut  ‘执行打印
    xlApp.Quit  ‘退出EXCEL

---- 至此读者应该看到,我们设计的报表打印是通过EXCEL程序来后台实现的。用户根本看不到具体过程,他们只看到一张张漂亮的报表轻易地被打印出来了。




                              用数据报表设计器创建报表

                                      ☆ 陶杨

  数据环境设计器(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)对象:命令对象定义了从数据库连接中将取回什么数据的详细信息。命令对象可基于任何一个数据库对象(表、视图、存储过程或同义字)或是一个SQL查询。

三、数据报表对象
  数据报表设计器包括以下几个对象:

1. 数据报表(Data Report)对象:类似于Visual Basic表单,它包含一个可视化设计器和一个代码模块。设计器用来创建报表的布局,也可以往设计器的代码模块里添加代码,用程序对包含在设计器里的控件或区域进行控制。 
2. 区域(Section)对象:数据报表设计器的每一个区域均由一个区域集对象中的一个区域对象来表示。在设计阶段,每一个区域都有一个标题,若要选择区域,只需用鼠标选择标题即可,并且在区域内可布置控件。在报表建立之前,使用区域对象及其属性调整报表。使用过报表的人都知道,报表可分为报头、报脚、页头、页脚、组头、组脚和细节等部分,在区域内也是一样的。

3. 数据报表控件:这些控件只能与Data Report designer(数据报表设计器)一起使用(注意:在数据报表设计器内不能使用Visual Basic的标准控件或者任何其他的ActiveX控件)。这些控件位于Visual Basic工具箱上的“DataReport”标签内。由于这些控件外观及功能与Visual Basic某些标准控件很类似,所以不再单独讲述。

四、一个实例
  我们使用Data Environment designer(数据环境设计器)作为数据报表的数据源,由Visual Basic自带的NWind.mdb数据库提供数据,设计一个简单的报表。设计好的报表如图1所示。

1. 创建数据环境设计器
(1)创建一个新的标准EXE工程文件。
(2)在工程菜单上,选择添加数据环境。如果在工程菜单中没有列出这一项,那么选择组件—设计器标签—选中数据环境,选择确定。
(3)在数据连接属性对话框中,选择Microsoft Jet 3.51 OLE DB Provider。
(4)选择“下一步”按钮,这样就进入了Connection标签。
(5)选择第一个文本框旁的“...”按钮。
(6)在存取数据库对话框中浏览并选择数据库文件Nwind.mdb。
(7)选择“确定”关闭该对话框。
(8)用鼠标右击Connection1图标,然后选择Rename,将名字改为Northwind。
(9)用鼠标右击Northwind图标,然后选择Add Command,再用鼠标右击Command1,选择“属性”命令,弹出属性对话框,在对话框中,按下表所示设置属性值。
Command Name
Customers
Connection
Northwind
DataBase Object
Table
Object Name
Customers 

(10)选择“确定”关闭该对话框。
(11)用鼠标右击Customers命令,选择Add Child Command,再用鼠标右击Command1,选择“属性”命令,弹出属性对话框,在对话框中,按下表所示设置属性值。
Command Name
Orders
Connection
Northwind
DataBase Object
Table
Object Name
Orders
(12)选择Relation标签,选中Relate to a Parent Command Object检查框。在Parent下拉框中选中Customers;Parent域和Child域中均已包含了CustomerID。
(13)选择添加,按“确定”关闭对话框。
(14)在属性窗口中按下表设置工程文件和设计器的属性值,然后保存工程文件。
Project Name
prjNwind
DataEnvironment Name
deNwind
Form Name
frmShowReport

2. 创建数据报表
  一旦创建了数据环境设计器,就可以创建一个数据报表了。由于不是所有在数据环境设计器内的字段都会用于设计报表,因此下面的过程只创建了一个显示几个字段的报表。

创建一个新报表的步骤如下: 
(1)在工程菜单上,选择Add Data Report命令,Visual Basic会在工程中添加一个新的数据报表。
(2)在属性窗口中按下表设置数据报表的属性。
Name
rptNwind
Caption
Northwind Data Report 

(3)在属性窗口中,将DataSource设置为deNwind,DataMember设置为Customers。
(4)用鼠标右击数据报表设计器,选择Retrieve Structure。
(5)用鼠标将数据环境设计器的CompanyName字段(在Customers命令下)拖放到组标题为Customers_Header的区域。
(6)删除标签控件Label1。
(7)用鼠标将数据环境设计器的OrderDate字段(在Orders命令下)拖放到Orders_Detail区域,并删除标签控件。
(8)调整数据报表设计器的各个区域,如图2所示。
(9)保存工程文件。

3. 用Show方法预览数据报表
  现在数据环境和数据报表对象都已建立,可以准备运行程序了。我们要做的最后一件事情就是编写代码以显示数据报表。
(1)在工程浏览器窗口中,用鼠标双击frmShowReport以显示表单设计器。
(2)在工具箱上,点击General标签。
(3)点击CommandButton图标,然后在表单上画一个命令按钮。
(4)在属性窗口中按下表设置命令按钮控件的属性。
Name
cmdShow
Caption
Show Report
(5)在按钮事件中,键入以下代码:
Private Sub cmdShow_Click()
rptNwind.Show
End Sub
(6)保存并运行工程文件。
点击Show Report以打印预览模式显示报表。


#10


CrystaIReports for VB5报表编程经验

 
  由于VB5本身无报表输出工具,因此在开发VB5数据库应用系统时,必须用第三方报表书写器,通常采用VB5的企业版附带的Crystal Reports。在开发时不注意两者的连接关系,经常会出现意想不到的问题,下面是笔者在开发VB5系统中的几点经验:
  1.报表控件的引入
  Crystal Reports不是VB5标准控件,而是Active X控件。使用时,首先要点击“工程→引用”菜单,引出部件窗口,再选Crystal Reports Control 4.6控件。
  2.报表制作
  现象:报表设计时文字已排列整齐,但预览或打印往往出现偏差。
  措施:表名及列头文字不要直接输入文本,而改用“Insert→Text Field”菜单插入文本字段,就可避免以上现象。
  3.数据输出
  现象:在数据输出时易犯错误,是因为在VB5中用SQL语句进行查询,然后打印,目的是想把查询结果输出到报表上,但结果往往仍然是原表中的数据。也就是说Crystal Reports并不认VB5的查询。
  措施:建一个临时表,查询先前删除表中的数据,再把查询结果放入到临时表,再进行预览或打印。
  4.报表控件的使用及路径的指定
  现象:在一个表单中,如果需输出多个报表,放置多个报表控件。打印时会出现“堆栈溢出”这样的致命错误。另外发布给用户时,需要设定任意路径,如果只指定报表名路径,也会出现错误。
  措施:如果在一个表单上要打印多个报表,在打印时先定义数据文件名和报表名,再打印。打印前设定时,不仅要设定报表文件路径,而且还要设定数据库的路径。
  CrystalReport1.datafile(index)=App.path & “数据库名”
  CrystalReport1.reportfilename=App.path & “报表文件名”  
  5.设定预览窗口
  现象:预览窗口太小,用户必须点击最大化按钮才能覆盖整个屏幕。
  措施:
  CrystalReport1.WindowHeight=screen.Height
  CrystalReport1.WindowsHeight=screen.Windth
  CrystalReport1.WindotTop=0
  CrystalReport1.WindowLeft=0
  或者用:
  CrystalReport1.Windo 
wState=crptM
aximized (江苏 徐静文)


本文出自:《电脑报》1999年01月04日第1期
 

#11


另外你还可以看一下电子工业出版社《用Visual Basic 访问数据库》(Jeffrey P. McManus著,罗四维 韩臻 等译)的第四章:报表与数据输出,里面讲了许多种方法。

#12


songyl: 快给分呐!

#13


songyl:太没意思了。

#14


用VsPrinter.Ocx吧,控制比Picture灵活得多。www.videosoft.com下有。用ActiveFree破解。

#15



bestbestbest:对不起,这两天因为忙没有上网,没想到你急成这样,就冲着你拿了这么多的文章,我也会给你20分的,少不了你的!最后一块儿给行吗?

不过我的问题还基本没有解决,我用datareport来做非中国式报表还可以,中国式的封闭表格我就做不出来了,你知道吗?封闭表格我就准备用Excel来结决,但是,我在程序中怎么也改不了一行的宽度,其他倒是没有问题了。我再加50分,如果你解决了,我再给你80分,满意了吧!  

其他高手也来帮帮我吧!!! :< 

#16


我建议使用Crystal Report 7.0 ,功能极其强大!

#17


songyl老弟:消消气,听我说!

你不是会用DataReport吗,我劝你试试ActiveReports(版本1.1,有破解文件)吧,使用方法很相近,保证可以制作你要的中国式报表,我当然知道该怎么做。另外Crystal Reports(版本8.0,有破解/汉化文件,但是有32M)也可以。

使用Excel制作报表,需要安装Office;而且根据经验,还有可能出现不兼容Office2000的现象(猜想)。如果你非要用Excel的效果,我建议你用Videosoft的VsFlexGrid7.0 + VsView7.0

#18


bestbestbest:
请问Crystal Reports8.0(有破解/汉化文件)在哪儿可以下载。

#19


town:
Crystal Reports Report Designer Component 8 (RDC)(32M)——http://ftp.img.seagatesoftware.com/webprod/scrvbasic/EN/rdc8.exe
Reporting Resource Kit (1.1M)——http://ftp.img.seagatesoftware.com/webprod/scrvbasic/EN/kit8.zip
破解汉化机——http://go.163.com/~activex/file/patch-crdc8.zip
另外Seagate的Crystal Reports主页——http://www.seagatesoftware.com/products/crystalreports/rdc/content.asp

加起来一共33.7M,可要悠着点下载。

#20


town:

Crystal Report Designer Component 8.0 解密过程:
1)在安装过程中输入下列注册码——
keycode:6M-300019W-D048000-0000000
Registration Number:1231467890
2)运行patch-crdc8.exe即可.

注意:解除了30天限制时间,对发布给最终用户界面进行了汉化,因汉化文件涉及到\Program Files和\WINDOWS两个目录,所以在运行patch-crdc8.exe时,一般不要修改"应用WinPatch文件的文件夹"下面的文本框中的内容.

#21


用 ActiveReport 吧, 如果你完全掌握了他的精髓, 你会发现他的强大是任何其他
Report 控件难以比拟的.
至于画中国表格, 可以使用动态添加方式, 表格栏数, 行数可以任意, 
斜线, 合并单元更是易如反掌.

#22


to bestbestbest
能不能说说您的制作打印模板的经验?