【问题标题】:How to call an Excel VBA Macro from Java Code?如何从 Java 代码调用 Excel VBA 宏?
【发布时间】:2011-10-17 05:41:45
【问题描述】:

我需要从通过 Java 从数据库中获取的数据生成 Excel 工作表。 为此,我需要在生成 Excel 时调用一些 VBA 宏函数。 谁能帮助我如何从 Java 代码调用 VBA 宏?

【问题讨论】:

标签: java vba excel


【解决方案1】:

您还可以在工作表更改时在 excel 中捕获事件,您甚至可以调用您想要的任何宏,因此如果您想调用宏“Blue”,您可以在隐藏的工作表,然后 Excel 将捕获更改,当您捕获更改时,您可以查看写入的内容并执行一些 ifelse 语句以获取您要为该实例调用的宏。不是很好的编码,但一个简单的解决方法。不过我会自己做其他方法。

【讨论】:

  • 感谢乔恩的回答,我们也可以这样做。但这是一个乏味的。目前,我们在一个充满宏的工作簿中有大约 10 张工作表。所以插入一个新的宏并维护它是一项艰巨的工作。
  • 我不会这样做,但它会起作用,我会设置一个事件处理程序类,这样您就不必将它放在每个工作表上。
  • 宏中的事件处理程序“类”??怎么做??
  • cpearson.com/excel/Events.aspx(事件概述)和cpearson.com/Excel/AppEvent.aspx(特定应用事件)
【解决方案2】:

适合我的解决方案: java代码:

try {
Runtime.getRuntime().exec("wscript yourPth\\myVBS.vbs");
} catch (IOException e) {
System.out.println(e);
System.exit(0);
}

myVBS.vbs 脚本:

Set objShell = CreateObject("WScript.Shell")
Dim cur
cur = "urpath to myVBS.vbs script"
WScript.Echo cur

ExcelMacroExample

Sub ExcelMacroExample() 

Dim xlApp 
Dim xlBook 
Dim xlsFile
xlsFile = cur & "\myExcel.xlsm"

Set xlApp = CreateObject("Excel.Application") 
Set xlBook = xlApp.Workbooks.Open(xlsFile) 
xlApp.Run "moduleName"
xlApp.Save
xlApp.Quit 

End Sub 

【讨论】:

    【解决方案3】:

    如果您不能使用JACOBCOM4J,您可以制作一个Visual Basic 脚本并从您的Java 程序中运行该脚本。

    要创建脚本打开记事本并编写如下内容:

    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open("myExcel.xlsm")
    
    objExcel.Application.Run "myExcel.xlsm!MyMacroName" 
    objExcel.ActiveWorkbook.Close
    
    objExcel.Application.Quit
    WScript.Quit
    

    将其保存为myVBS.vbs,您可以在 Java 代码中这样调用它:

    cmd = "you_path\\myVBS.vbs";
    Runtime.getRuntime().exec(cmd);
    

    【讨论】:

      【解决方案4】:

      我不太了解您从数据库中的数据生成 Excel 工作表的整体方法。通常,我会使用 Vivek 建议的 Apache POI。

      但是,如果您确实需要在工作表中调用 Excel 宏,那么您需要做两件事:

      首先,您需要像JACOBCOM4J 或类似工具这样的 JAVA 到 COM 桥接器。如果它支持自动化接口就足够了。它不需要完全的 COM 支持。

      其次,使用 JAVA-to-COM 桥,您应该启动 Excel,加载 Excel 工作表,运行宏,保存并关闭 Excel。所以你必须调用相当于:

      Set Wb = Application.Workbooks.Open FileName
      Application.Run MacroName
      Wb.Save
      Application.Quit
      

      【讨论】:

        【解决方案5】:

        我不确定是否可以直接从 Java 调用宏。但是您可以在 excel 表中填充数据并在用户第一次打开 excel 表时调用宏。您可以使用 Apache POI 工具在包含宏的 Excel 工作表中填充数据 - http://poi.apache.org/spreadsheet/index.html

        【讨论】:

        • 感谢先生的回复。实际上我们已经设计了一个excel模板。我想使用 java 填充该模板。在填充模板时,我们需要调用一些宏函数来操作写入的数据。我们目前正在使用 JExcel 来读取 excel。但是我们不知道可以从中调用宏。那么你知道 jxl 可以用于这个目的吗?
        • JExcel 类似于 Apache POI。它是一个独立于平台的库,用于在不使用 Excel 本身的情况下读取和写入 Excel 文件。您不能使用它运行宏。但是 JExcel 能够打开现有的 Excel 文件(您的模板),向其中添加数据并进行各种格式化。所以我建议你用 JExcel 实现宏会做什么。如果您需要在非 Windows 平台或服务器环境(例如 Web 应用程序)中运行它,则无论如何都无法运行 Excel 宏,因为 Excel 仅支持 Windows 且仅支持单用户环境。
        • 感谢 Codo,我们目前正在使用 JExcel,我们也认为我们应该使用它,而不是在项目中引入新的 API。是的,我们将执行所需的编码,因为我们仍然无法找到如何从 java 调用宏。所以我们这样做只是为了通过 JExcel 格式化和更改相关的东西。再次感谢您。
        猜你喜欢
        • 1970-01-01
        • 2011-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-25
        • 1970-01-01
        • 1970-01-01
        • 2011-06-23
        相关资源
        最近更新 更多