用Excel报表生成网页

我们可以直接用Excel报表生成网页后发送给客户端。

用Excel报表生成网页需要事先约定一个目录,每次用户访问这个目录,服务端会进行一些特殊的处理,用于将Excel报表转换成网页并发送到客户端,代码一般类似:

If e.Path.StartsWith("报表目录\")
    e.ResponseEncoding = "gb2312"  '这里要正确设置编码格式, 否则会乱码
    Select Case e.Path
        Case  "报表目录\网页文件.htm"
            Dim Book As New XLS.Book(ProjectPath & "Attachments\报表模板.xls")
            e.WriteBookAsHTML(Book)
        Case Else
            e.AsReportServer("报表目录\")

    End Select
Else

   
'用于生成常规网页的代码

End
If

WriteBookAsHTML方法会自动生成Excel报表,并将生成结果转换成网页后发送给客户端浏览器。

AsReportServer看起来没有意义,实际上你删除这行代码的话,客户端不会显示任何内容,这是因为Excel报表转换成网页之后,并非只有一个单一的网页文件,还会生成一系列的辅助文件,需要通过AsReportServer方法将这些辅助文件发送给客户端。

我们也无需考虑多线程以及临时文件的处理,Foxtable会自动完成这些工作。

需要注意的是: AsReportServer的参数就是约定的报表目录,必须和第一行指定的报表目录相同,报表目录也必须是专用的,不能再用于访问其他网页。

示例一

1、首先打开CaseStudy目录下的示例文件"Excel报表.foxdb"文件。

2、将HttpRequest事件代码设置为:

If e.Path.StartsWith("Reports\")
    e.ResponseEncoding = "gb2312"
    Select Case e.Path
        Case  "Reports\ckd.htm"
            Dim Book As New XLS.Book(ProjectPath &
"Attachments\
出库单.xls")
            e.WriteBookAsHTML(Book)
       Case  "Reports\jianli.htm"
            Dim Book As New XLS.Book(ProjectPath &
"Attachments\
资料卡.xls")
            e.WriteBookAsHTML(Book)
        Case Else
            e.AsReportServer("Reports\")
   
End Select
End
If

3、在命令窗口执行:

HttpServer.Prefixes.Add("http://127.0.0.1/")
HttpServer
.Start()

现在在浏览器输入网址:

http://127.0.0.1/Reports/ckd.htm

即可得到网页:

输入地址:

http://127.0.0.1/Reports/jianli.htm

即可得到网页:

示例二

更多的时候,我们需要根据客户端提交的访问请求,从后台提起对应的数据生成Excel报表并转成网页,例如我们将HttpRequest事件代码改为:

If e.Path.StartsWith("Reports\")
    e.ResponseEncoding = "gb2312"
    Select Case e.Path
        Case  "Reports\jianli.htm"
            Dim Book As New XLS.Book(ProjectPath &
"Attachments\
资料卡.xls")
            book.AddDataTable(
"
员工","","Select * from {员工} where 姓名 = '" & e.GetValues("nm") & "'")
            e.WriteBookAsHTML(Book)
        Case Else
            e.AsReportServer("Reports\")
   
End Select
End
If

现在输入网址:

http://127.0.0.1/Reports/jianli.htm?nm=张颖

可得到网页:

示例三

我们也可以将Excel报表转换成PDF格式发送给客户端浏览器,例如我们将HttpRequest事件代码改为:

If e.Path.StartsWith("Reports\")
    e.ResponseEncoding = "gb2312"
    Select Case e.Path
        Case  "Reports\jianli.htm"
            Dim Book As New XLS.Book(ProjectPath &
"Attachments\
资料卡.xls")
            book.AddDataTable(
"
员工","","Select * from {员工} where 姓名 = '" & e.GetValues("nm") & "'")
            e.WriteBookAsPDF(Book)
        Case Else
            e.AsReportServer("Reports\")
   
End Select
End
If

代码和示例二基本是相同的,只是将WriteBookAsHTML换成了WriteBookAsPDF,现在输入网址:

http://127.0.0.1/Reports/jianli.htm?nm=张颖

浏览器会显示一个PDF文件:

示例四

常规的Excel文件,一样可以转换为网页发送,不过在使用WriteBookAsHTML或WriteBookAsPDF方法是,要将第二个参数设置为False,通知系统这不是一个模板文件,无需生成报表,直接发送即可,例如:

If e.Path.StartsWith("Reports\")

    e.ResponseEncoding = "gb2312"
    Select Case e.Path
        Case  "Reports\jianli.htm"
            Dim Book As New XLS.Book(ProjectPath &
"Attachments\
资料卡.xls")
            e.WriteBookAsHTML(Book,False)
'
第二个参数设置为False,表示这不是模板,直接发送即可
        Case Else
            e.AsReportServer("Reports\")
   
End Select
End
If

示例五

如果一个Excel文件有部分表是模板,有部分表是常规表格,那么怎么处理呢?一样的简单,WriteBookAsHTML和WriteBookAsPDF都可以指定在生成报表的时候,将部分表作为常规表处理,例如:

If e.Path.StartsWith("Reports\")
    e.ResponseEncoding = "gb2312"
    Select Case e.Path
        Case  "Reports\jianli.htm"
            Dim Book As New XLS.Book(ProjectPath & "Attachments\
资料卡.xls")
            e.WriteBookAsHTML(Book,1,2)  '
第二个表和第三个表作为常规表直接发送.
        Case Else
            e.AsReportServer("Reports\")
   
End Select
End
If


本页地址:http://www.foxtable.com/mobilehelp/topics/0288.htm