从ColdFusion服务器执行Excel宏

时间:2012-04-13 13:42:57

标签: java excel coldfusion apache-poi poi-hssf

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

我想在上传文件后在该Excel文件中执行一个宏。

任何人都知道如何设法做到这一点?

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 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对该文件夹的读/写访问权限。