报表事件

报表事件是针对高端用户的,一般用户可以忽略。
前面介绍的Excel报表功能,足以满足大多数场合的需要,需要配合事件代码使用的场合并不多。

为什么要有报表事件?

Excel报表的表达式是基于VBScript的,功能有限,无法满足一些相对复杂的需求。
标记的出现,可以在一定程度上缓解这个问题,因为标记的值可以通过代码来设置。
如果能够更进一步,允许在报表生成过程中动态修改标记的值,那么就更加完美了。
为此Foxtable针对Excel报表提供了七个事件:

BeforeBuild:     生成某个报表之前执行
AfterBuild:      生成某个报表之后执行
BuildDetail:     生成某个细节区之前执行
BuildPageHeader: 生成某个页首之前执行
BuildPageFooter: 生成某个页尾之前执行
BuildGroupHeader:生成某个分组头之前执行
BuildGroupFooter:生成某个分组尾之前执行

通过这些事件,可以动态地修改标记的值,使得用模板生成的Excel报表,同样可以完成任意复杂的计算。
通常来说,只有遇到用常规方法和表达式无法实现的任务时,才可以考虑用标签加事件来解决。

通过菜单“打印输出”功能区,单击下面的按钮,可以为Excel报表设置事件代码:

区分模板

这六个事件是项目级别的,只要基于模板生成Excel报表,不管是通过代码还是菜单,都会触发这些事件。
显然大多数时候,不同的报表,需要不同的事件代码,所以我们需要在事件代码中知道正在基于哪一个模板文件生成报表。
所有这些事件的e参数,都有一个e参数Book(工作簿),我们可以利用Book的TempLate属性获得报表的模板文件名称。
这样我们就可以在事件中,为不同的报表,编写不同的代码:

Select e.Book.TempLate
    Case
"模板1"
       
'代码
    Case
"模板2"
       
'代码
    Case
"模板3"
       
'代码
    Case
"模板4"
       
'代码
End Select

需要注意的是,TempLate返回的模板文件名称是不包括路径和后缀名的, 例如你使用的模板文件名称“出库单.xls”,那么TempLate属性的值等于“出库单”。

区分工作表

有的时候,一个模板文件可能会包括多个工作表,我们同样需要在代码中对此进行区分。
Book有一个属性CurrentSheetName属性,用于返回正在生成的工作表的名称。
这样我们就可以在事件中,为不同的工作表,编写不同的代码:

Select e.Book.TempLate
    Case
"模板1"
       
Select Case e.Book.CurrentSheetName
            Case
"工作表1"
               
'代码
           
Case "工作表2"
               
'代码
       
End Select
   
Case "模板2"
       
Select Case e.Book.CurrentSheetName
            Case
"工作表1"
               
'代码
           
Case "工作表2"
               
'代码
       
End Select
   
Case "模板"
       
'代码
End
Select

修改标记的值

在任何一个报表事件中,都可以通过Marks集合修改标记的值:

e.Book.Marks("标记名称") = 值

接下来我们将逐个介绍如何使用这七个报表事件。


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