2

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

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

任何人都知道我该如何做到这一点?

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

4

2 回答 2

2

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

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

于 2012-04-13T15:00:38.373 回答
1

我找到了一种方法来做这样的事情:

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.fileNameVARIABLES.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 服务器对该文件夹的读/写访问权限。

于 2012-04-13T16:04:35.043 回答