报表事件
报表事件是针对高端用户的,一般用户可以忽略。
前面介绍的Excel报表功能,足以满足大多数场合的需要,需要配合事件代码使用的场合并不多。
为什么要有报表事件?
Excel报表的表达式是基于VBScript的,功能有限,无法满足一些相对复杂的需求。
标记的出现,可以在一定程度上缓解这个问题,因为标记的值可以通过代码来设置。
如果能够更进一步,允许在报表生成过程中动态修改标记的值,那么就更加完美了。
为此Foxtable针对Excel报表提供了七个事件:
BeforeBuild: 生成某个报表之前执行
AfterBuild: 生成某个报表之后执行
BuildDetail: 生成某个细节区之前执行
BuildPageHeader: 生成某个页首之前执行
BuildPageFooter: 生成某个页尾之前执行
BuildGroupHeader:生成某个分组头之前执行
BuildGroupFooter:生成某个分组尾之前执行
通过这些事件,可以动态地修改标记的值,使得用模板生成的Excel报表,同样可以完成任意复杂的计算。
通常来说,只有遇到用常规方法和表达式无法实现的任务时,才可以考虑用标签加事件来解决。
通过菜单“打印输出”功能区,单击下面的按钮,可以为Excel报表设置事件代码:
区分模板
这六个事件是项目级别的,只要基于模板生成Excel报表,不管是通过代码还是菜单,都会触发这些事件。
显然大多数时候,不同的报表,需要不同的事件代码,所以我们需要在事件代码中知道正在基于哪一个模板文件生成报表。
所有这些事件的e参数,都有一个e参数Book(工作簿),我们可以利用Book的TempLate属性获得报表的模板文件名称。
这样我们就可以在事件中,为不同的报表,编写不同的代码:
Select
e.Book.TempLate需要注意的是,TempLate返回的模板文件名称是不包括路径和后缀名的, 例如你使用的模板文件名称“出库单.xls”,那么TempLate属性的值等于“出库单”。
区分工作表
有的时候,一个模板文件可能会包括多个工作表,我们同样需要在代码中对此进行区分。
Book有一个属性CurrentSheetName属性,用于返回正在生成的工作表的名称。
这样我们就可以在事件中,为不同的工作表,编写不同的代码:
Select
e.Book.TempLate修改标记的值
在任何一个报表事件中,都可以通过Marks集合修改标记的值:
e.Book.Marks(
"标记名称") = 值接下来我们将逐个介绍如何使用这七个报表事件。