基于模板

在基础应用篇,我们已经介绍了利用Excel文件作为模板生成Excel报表的方法。
利用Foxtable提供的数据引用方法,可以大大减轻设计Excel报表的工作量。

设计好报表模板后,可能需要通过窗口中的按钮来生成Excel报表,而不是通过菜单,此时可以参考下面的代码:

Dim Book As New XLS.Book(ProjectPath & "Attachments\出库单.xls")
Dim
fl As String = ProjectPath & "Reports\出库单.xls"
Book
.Build() '生成细节区
Book
.Sheets(0).Rows.RemoveAt(0) '删除第一行,Excel报表的第一行通常是标记行
Book
.Save(fl) '保存工作簿
Dim
Proc As New Process '打开工作簿
Proc
.File = fl
Proc
.Start()

如果要直接打印,代码为:

Dim Book As New XLS.Book(ProjectPath & "Attachments\出库单.xls")
Dim
fl As String = ProjectPath & "Reports\出库单.xls"
Book.Build()
'生成细节区
Book.Sheets(0).Rows.RemoveAt(0) '删除第一行,Excel报表的第一行通常是标记行
Book.Save(fl)
'保存工作簿
Dim
Proc As New Process '打开工作簿
Proc.File = fl
Proc.Verb = "Print" '指定动作
Proc.Start()

Book的Build方法用于生成细节区,如果模板文件中包含细节区定义,务必调用此方法。

此外,模板只能引用单元格的数据,并进行一些简单的计算统计,所以某些时候并不能满足我们的要求。
我们可以预先设计好模板,简单的部分通过数据引用来实现,然后利用代码动态修改模板,满足一些特殊的需求。
例如在基础应用的示例二中,我们通过模板生成了下图所示的出库单:

现在我们希望在出库单的后面加上制单人信息,制单人等于当前登录用户名, 代码很简单:

Dim Book As New XLS.Book(ProjectPath & "Attachments\出库单.xls") '打开模板
Dim
Sheet As XLS.Sheet = Book.Sheets(0)
Sheet(
6,6).Value = "制单人:" & User.Name '修改模板,加入制单人信息
Book.Build()
'生成细节区
Book.Sheets(0).Rows.RemoveAt(0) '删除第一行,Excel报表的第一行通常是标记行
Book.Save(
"c:\reports\test.xls") '保存工作簿
Dim
Proc As New Process '打开工作簿
Proc.File =
"c:\reports\test.xls"

Proc.Start()

在命令窗口执行上面的代码,会得到下图所示的出库单:

通过动态修改模板文件,我们可以完成更多复杂的功能,例如可以修改细节区定义,使得同一个模板文件能够用于不同的表;也可以在Build方法执行完成后,再根据需要向生成的报表中写入内容;甚至可以完全用代码定义一个模板,然后用Build方法来生成报表。


本页地址:http://www.foxtable.com/webhelp/topics/1145.htm