VBA(Excel)和网页
如果你是Excel的资深用户,一定会留恋VBA,实际上你的VBA知识在Foxtable一样有用,原来的VBA代码只需稍作修改,就可以在Foxtable中使用。
关于如何在Foxtable使用VBA操作Excel文件,参考:Excel与VBA
本节介绍如何将VBA处理后的Excel文件转换为网页或PDF文件发送到客户端,考虑Foxtable的Excel报表功能并不支持图表,本节的内容对于需要实现图文并茂网页的用户很有意义。
HttpRequest有两个方法,WriteExcelAsHTML和WriteExcelAsPDF,分别用于将Workbook对象转换为网页或PDF文件发送到客户端。
一个简单的例子
1、打开CaseStudy目录下的文件"Excel报表.foxtdb"
2、将HttpRequest事件代码设置为:
If
e.Path.StartsWith("Reports\")
e.ResponseEncoding
= "gb2312"
Select Case
e.Path
Case
"Reports\table1.htm"
Dim
app As New
MSExcel.Application
Dim
wb As MSExcel.Workbook
= app.WorkBooks.Open(ProjectPath
&
"Attachments\table.xlsx")
'VBA代码
e.WriteExcelAsHTML(wb)
Case
"Reports\table2.htm"
Dim
app As New
MSExcel.Application
Dim
wb As MSExcel.Workbook
= app.WorkBooks.Open(ProjectPath
&
"Attachments\table.xlsx")
'VBA代码
e.WriteExcelAsPDF(wb)
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/table1.htm
即可得到网页:
如果在浏览器输入网址:
http://127.0.0.1/Reports/table2.htm
会以PDF格式显示上图中的内容。
一定要多线程
以上代码并不会自动多线程执行,所以效率很低,实际应用的时候,一定要多线程执行,否则多个用户同时访问的时候,排队等候的时间会很长,甚至会出现超时错误。
我们可以用异步函数实现多线程,异步函数后面会有专门的章节介绍,目前我们只需大概了解其用法即可。
我们看看如何通过异步函数将上述代码改为多线程执行。
1、新建一个内部函数,函数名"ExcelWeb"(名称可以随意),代码为:
Dim
e As
RequestEventArgs =
args(0)
e.ResponseEncoding
= "gb2312"
Select
Case e.Path
Case
"Reports\table1.htm"
Dim app
As New
MSExcel.Application
Dim wb
As MSExcel.Workbook
= app.WorkBooks.Open(ProjectPath
&
"Attachments\table.xlsx")
'VBA代码
e.WriteExcelAsHTML(wb)
Case
"Reports\table2.htm"
Dim app
As New
MSExcel.Application
Dim wb
As MSExcel.Workbook
= app.WorkBooks.Open(ProjectPath
&
"Attachments\table.xlsx")
'VBA代码
e.WriteExcelAsPDF(wb)
Case Else
e.AsReportServer("Reports\")
End
Select
e.Handled
= True '通知系统异步函数执行完毕,可以关闭信道
2、将HttpRequest事件代码改为:
If
e.Path.StartsWith("Reports\")
e.AsyncExecute
= True
'通知系统异步执行,不要关闭信道
Functions.AsyncExecute("ExcelWeb",e)
End
If