有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何从Java代码中调用Excel VBA宏?

我需要根据通过Java从数据库中获取的数据生成Excel表格。 为此,我需要在生成Excel时调用一些VBA宏函数。 有人能帮我从Java代码中调用VBA宏吗


共 (4) 个答案

  1. # 1 楼答案

    如果不能使用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);
    
  2. # 2 楼答案

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

  3. # 3 楼答案

    我真的不明白你从数据库中的数据生成Excel表格的总体方法。通常,我会使用Vivek提出的ApachePOI

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

    首先,您需要一个JAVA到COM的桥接器,比如JACOBCOM4J或类似的工具。如果它支持自动化接口就足够了。它不需要有完整的COM支持

    第二,使用JAVA-to-COM桥,您应该启动Excel,加载Excel工作表,运行宏,保存并关闭Excel。因此,你必须称之为:

    Set Wb = Application.Workbooks.Open FileName
    Application.Run MacroName
    Wb.Save
    Application.Quit
    
  4. # 4 楼答案

    适合我的解决方案: 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