从ColdFusion服务器执行Excelmacros

我有一个ColdFusion Web应用程序,它允许用户在服务器上上载Excel工作簿。

一旦文件被上传,我想在Excel文件中执行一个macros。

任何人都有一个想法,我怎么可以做到这一点?

注意:我也可以使用Java对象,我已经使用HSSF POI来访问表格的内容。

POI和类似的java库,不能运行macros。 运行macros需要MS Excel应用程序,这意味着它必须安装在服务器上。 然后通过COM,Excel.Interop等访问。

也就是说,出于安全原因,您通常不希望在服务器上执行macros。 所以我的第一个问题是这个macros是做什么的? 如果你能告诉我们你最终想达到什么目的,也许有更简单和更安全的select。

我find了一个办法做这样的事情:

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文件的path, VARIABLES.Instance.fileName是我的Excel文件的名称,而VARIABLES.Instance.macroName是我想要启动的macros的名称。

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脚本文件的名称。

注意:macros在服务器上生成一个文件,所以我需要指定ColdFusion Server对文件夹的读/写权限。