我有一个 ColdFusion Web 应用程序,它允许用户在服务器上上传 Excel 工作簿。
上传文件后,我想在该 Excel 文件中执行宏。
任何人都知道我该如何做到这一点?
注意:我也可以使用 Java 对象,我已经在使用 HSSF POI 来访问表格的内容。
我有一个 ColdFusion Web 应用程序,它允许用户在服务器上上传 Excel 工作簿。
上传文件后,我想在该 Excel 文件中执行宏。
任何人都知道我该如何做到这一点?
注意:我也可以使用 Java 对象,我已经在使用 HSSF POI 来访问表格的内容。
POI 和类似的 java 库无法运行宏。运行宏需要 MS Excel 应用程序,这意味着它必须安装在服务器上。然后通过 COM、Excel.Interop 等访问。
也就是说,出于安全原因,通常您不想在服务器上执行宏。所以我的第一个问题是这个宏有什么作用?如果你能告诉我们你最终想要达到的目标,也许有更简单、更安全的选择。
我找到了一种方法来做这样的事情:
1)在服务器上编写一个 VBS 脚本文件,如下所示:
<cfset contentVBS =
"Dim objXL" & Chr(13) & Chr(10) &
"Set objXL = CreateObject(" & Chr(34) & "Excel.Application" & Chr(34) & ")" & Chr(13) & Chr(10) &
"With objXL" & Chr(13) & Chr(10) &
" .Workbooks.Open (" & Chr(34) & VARIABLES.Instance.filePath & VARIABLES.Instance.fileName & Chr(34) & ")" & Chr(13) & Chr(10) &
" .Application.Run " & Chr(34) & VARIABLES.Instance.macroName & Chr(34) & Chr(13) & Chr(10) &
" .Application.Quit" & Chr(13) & Chr(10) &
"End With" & Chr(13) & Chr(10) &
"Set objXL = Nothing" & Chr(13) & Chr(10)
/>
<cffile
action="write"
charset="utf-8"
file="#VARIABLES.Instance.filePath##VARIABLES.Instance.script_vbs_name#"
output="#contentVBS#"
addnewline="no"
>
VARIABLES.Instance.filePath
我的 Excel 文件的路径在哪里,是我的 Excel 文件的名称VARIABLES.Instance.fileName
,VARIABLES.Instance.macroName
是我要启动的宏的名称。
2)使用cscript.exe执行vbs文件:
<cfexecute name = "C:\WINDOWS\system32\cscript.exe"
arguments = "#VARIABLES.Instance.filePath##VARIABLES.Instance.script_vbs_name#">
</cfexecute>
VARIABLES.Instance.script_vbs_name
我刚才写的VBS脚本文件的名字在哪里。
注意:该宏在服务器上生成一个文件,因此我需要指定 ColdFusion 服务器对该文件夹的读/写访问权限。