WordReport
WordReport用于编程生成Word报表。
定义一个WordReport的语法为:
Dim wrt As New WordReport(Table, TemplateFile, ReportFile)
Table: 要打印的表(Table)或表的名称
TemplateFile:字符型,模板文件名称,含路径
ReportFile:字符型,生成的报表文件名称,含路径
WordReport的成员有:
名称 | 说明 |
Build | 方法,生成报表。 |
BuildOne | 方法,根据指定的一行数据生成报表,语法: BuildOne(dr) dr: DataRow或Row类型,根据此行数据生成报表。 |
Replace | 方法,将指定的内容替换为新的内容,语法: Repalce(findstr,replacestr) findstr: 字符型,指定要查找的内容 replacestr: 字符型,指定用于替换的内容。 Replace是全局有效。 |
ReplaceOne | 方法,将指定的内容替换为新的内容,语法: RepalceOne(findstr,replacestr) findstr: 字符型,指定要查找的内容 replacestr: 字符型,指定用于替换的内容。 ReplaceOne只对下一条记录生效,需要和BuildOne配合使用。 |
ReplaceWithImage | 方法,将指定的内容替换为图片,语法: ReplaceWithImage(findstr,imagefile,width,height) findstr: 字符型,指定要查找的内容 imgefile:字符型,用于替换的图片文件 width: 整数型,指定图片宽度 height:整数型,指定图片高度 |
Quit | 方法,退出报表 |
Show | 方法,启动Word,显示生成的报表。 |
SaveToPdf | 保存工作簿为PDF文件,语法为: SaveToPdf(File) File: 文件名称,含路径。 |
RecordsOnEachPage | 属性,整数型,指定每页打印的记录数。 |
重要提示:
用WordReport生成报表之后,必须执行Quit方法退出,或者执行Show方法显示报表,否则内存将常驻一个Word进程,
影响后续报表的生成和设计,直到你中断这个进程,切记切记。
示例一
常规的根据模板生成报表:
Dim
tm
As String
=
ProjectPath
&
"Attachments\出库单.doc"
'指定模板文件
Dim fl
As String
=
ProjectPath
&
"Reports\出库单.doc"
'指定目标文件
Dim wrt
As New
WordReport(Tables("出库"),tm,fl)
'定义一个WordReport
wrt.Build()
'逐行生成报表
wrt.Show()
'显示报表
提示,Build方法根据当前选定行生成报表。
示例二
利用BuildOne方法,可有根据指定条件的行来生成报表,例如:
Dim
drs
As List(of
DataRow)
= DataTables("出库").Select("出库日期
= #"
&
Date.Today
&
"#")
'筛选出符合条件的行
If drs.Count
> 0
Then
'如果存在符合条件的行
Dim tm
As String
=
ProjectPath
&
"Attachments\出库单.doc"
'指定模板文件
Dim fl
As String
=
ProjectPath
&
"Reports\出库单.doc"
'指定目标文件
Dim wrt
As New
WordReport(Tables("出库"),tm,fl)
'定义一个WordReport
For Each
dr
As
DataRow In
drs
'逐行生成报表
wrt.BuildOne(dr)
Next
wrt.Show()
'显示报表
End If
再例如根据已经勾选的行生成报表:
Dim
rs
As List(of
Row)
= Tables("出库").GetCheckedRows
If rs.Count
> 0
Then
'如果存在符合条件的行
Dim tm
As String
=
ProjectPath
&
"Attachments\出库单.doc"
'指定模板文件
Dim fl
As String
=
ProjectPath
&
"Reports\出库单.doc"
'指定目标文件
Dim wrt
As New
WordReport(Tables("出库"),tm,fl)
'定义一个WordReport
For Each
r
As Row
In rs
'逐行生成报表
wrt.BuildOne(r)
Next
wrt.Show()
'显示报表
End If
实例三
你可以在生成模板前,先用Repalce修改模板,这样我们可以用代码完成一些Word报表无法直接实现的统计,然后将得到的统计结果替换约定的标记,例如:
Dim
tm
As String
=
ProjectPath
&
"Attachments\订单.doc"
'指定模板文件
Dim fl
As String
=
ProjectPath
&
"Reports\订单.doc"
'指定目标文件
Dim wrt
As New
WordReport(Tables("订单"),tm,fl)
'定义一个WordReport
wrt.Replace("[合计]",DataTables("订单").Compute("Sum(数量)"))
'用代码计算出总的销售数量并替换模板中的合计标记
wrt.Build()
'生成报表
wrt.Show()
'显示报表
示例四
Replace对模板的修改是全局的。
我们也可以用ReplaceOne修改模板,和Repalce不同,RepalceOne仅对下一条记录生效,需要和BuildOne配合使用,例如:
Dim
tm
As String
=
ProjectPath
&
"Attachments\订单.doc"
'指定模板文件
Dim fl
As String
=
ProjectPath
&
"Reports\订单.doc"
'指定目标文件
Dim wrt
As New
WordReport(Tables("订单"),tm,fl)
'定义一个WordReport
Dim sum
As
Integer
For Each r
As Row
In Tables("订单").rows
'逐行生成报表
sum
= sum
+ r("数量")
'逐行累计
wrt.ReplaceOne("[合计]",sum)
wrt.BuildOne(r)
Next
wrt.Show()
'显示报表
这样生成报表的时候,每一条记录的合计,都是截止到此行为止的合计。
实例五
假定我们要给员工资料卡加上二维码,可以在设计模板的时候,引用一个约定的图片文件:
然后用下面的代码生成报表,在生成每个员工的资料卡之前,都先根据这个员工的资料合成一个二维码,并保存为约定的图片文件:
Dim
tm
As String
=
ProjectPath
&
"Attachments\员工资料卡.doc"
'指定模板文件
Dim fl
As String
=
ProjectPath
&
"Reports\员工资料卡.doc"
'指定目标文件
Dim mg
As String
=
ProjectPath
&
"Images\二维码.wmf"
'约定的图片文件
Dim wrt
As New
WordReport(Tables("员工"),tm,fl)
'定义一个WordReport
For Each r
As Row
In Tables("员工").Rows
'逐行生成报表
Dim Bar
As New
BarCodeBuilder
Bar.Symbology
= Barpro.Symbology.QRCode
Bar.QRCodeModuleSize =
2
'二维码的放大倍数
Bar.Code
= "姓名:"
&
r("姓名")
&
vbcrlf
&
"部门:"
&
r("部门")
&
vbcrlf
&
"电话:"
&
r("办公电话")
bar.SaveImage(mg,300)
wrt.BuildOne(r)
Next
wrt.Show()
'显示报表
这是生成的报表,有兴趣的话,你可以扫描一下这个二维码:
总结:Word报表有BuildOne和RepalceOne方法,可以逐行生成报表,可以逐行修改模板,而且用BuildOne生成报表的时候,行可以来自不同的表,只要模板中引用的列存在即可,非常灵活。