我有一个ColdFusion Web应用程序,允许用户在服务器上上传Excel工作簿。
我想在上传文件后在该Excel文件中执行一个宏。
任何人都知道如何设法做到这一点?
注意:我也可以使用Java对象,我已经使用HSSF POI来访问Sheets的内容。
答案 0 :(得分:2)
也就是说,通常您不希望出于安全原因在服务器上执行宏。所以我的第一个问题是这个宏会做什么?如果你能告诉我们你最终想要达到的目标,也许有更简单,更安全的选择。
答案 1 :(得分:1)
我找到了办法做这件事:
1)在服务器上写一个VBS Script文件,如下所示:
<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文件的路径,VARIABLES.Instance.fileName
是我的Excel文件的名称,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 Server对该文件夹的读/写访问权限。