用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