基于后台数据生成报表

从Foxtable 2017开始,Excel报表可以直接基于后台数据生成。

一个例子

如果你设计了一个下图所示的Excel报表模板:

假定系统并没有加载员工表,或者员工表只加载了部分数据,我们用下面的代码,一样可以从后台提取未加载的数据来生成报表,而且非常简单:

Dim Book As New XLS.Book(ProjectPath & "Attachments\资料卡.xls")
Dim
fl As String = ProjectPath & "Reports\资料卡.xls"
book
.AddDataTable("员工","数据源名称","Select * from {员工} where 姓名 = '王伟'")
Book
.Build()
Book
.Save(fl)
Dim
Proc As New Process
Proc
.File = fl
Proc
.Start()

提示:

AddDataTable方法用于从后台提取数据生成一个临时表,由Excel报表模板根据此临时表生成报表。
例如上面的代码中,
AddDataTable利用Select语句生成了一个临时表,表名为"员工"。
系统在生成Excel报表的过程中,优先调用
AddDataTable生成的临时表,无需担心和现有同名表产生冲突。

AddDataTable的语法为:

AddDataTable(Name,DataSouce,SelectString)
AddDataTable(Name,DataTable)

Name 字符型,临时表的名称,必须和报表模板中的表名保持一致。
DataSouce 字符型,用于指定数据源名称。
SelectString 字符型,用于指定Select语句
DataTable DataTable型,用于直接指定一个临时DataTable作为报表的数据来源,此DataTable不能是DataTables中的一员。
GroupTableBuilder、CrossTableBuilder、SQLGroupTableBuilder、SQLCrossTableBuilder、SQLJoinTableBuilder和DataTableBuilder的Build方法,都有一个逻辑参数,将此参数设置为True,将生成一个DataTable,此DataTable将不会包括在DataTables中。

例如:

Dim Book As New XLS.Book(ProjectPath & "Attachments\test.xls")
Dim
fl As String = ProjectPath & "Reports\test.xls"
Dim
g As New SQLGroupTableBuilder("统计表1", "订单")
g
.ConnectionName = "数据源名称"
g
.Groups.AddDef("产品")
g
.Totals.AddDef("数量")
book
.AddDataTable("统计表1", g.Build(True)) '添加临时表
Book
.Build()
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
.AddDataTable("出库","数据源名称","Select * from {出库} where 出库单编号= 'CK-20030726001'") '添加父表
book
.AddDataTable("出库明细","数据源名称","Select * from {出库明细} where 出库单编号= 'CK-20030726001'") '添加子表
book
.AddRelation("出库","出库单编号","出库明细","出库单编号") '建立关联
Book
.Build() '生成细节区
Book
.Save(fl) '保存工作簿
Dim
Proc As New Process '打开工作簿
Proc
.File = fl
Proc
.Start()

提示: AddRelation方法用于在临时表之间建立关联。

AddRelation的语法为:

AddRelation(ParentTable,ParentCol,ChildTable,ChildCol)

ParentTable 字符型,父表名称。
ParentCol 字符型,父表关联列名称,如果有多个关联列,可以用一个字符型数组表示。
ChildTable 字符型,子表名称。
ChildCol 字符型,子表关联类名称,如果有多个关联列,可以用一个字符型数组表示。


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