How to call an Excel VBA Macro from Java Code?

前端 未结 5 1343
孤城傲影
孤城傲影 2020-12-15 01:36

I need to generate an Excel sheet from the data fetched from a database through Java. For that, I need to call some VBA Macro functions while generating that Excel. Can anyb

相关标签:
5条回答
  • 2020-12-15 02:16

    I am not sure if it is possible to call macro directly from Java. But you can populate the data in excel sheet & call the macro when the user opens the excel sheet for the first time. You would be able to populate data in a excel sheet containing macros using Apache POI tool - http://poi.apache.org/spreadsheet/index.html

    0 讨论(0)
  • 2020-12-15 02:22

    You might also be able to capture an event in excel when a worksheet changes you can have the even call whatever macro you want it to, so if you want to call the macro "Blue" you can write "blue" in a hidden worksheet then Excel will capture the change, when you capture the change you can see what was written and do some if ifelse statements to get to the macro you want to call for that instance. Not really good coding, but an easy workaround. I would do the other methods myself though.

    0 讨论(0)
  • 2020-12-15 02:28

    I don't really understand your overall approach to generate Excel sheet from the data in a database. Normally, I'd use Apache POI as proposed by Vivek.

    However, if you really need to call an Excel macro in a sheet, then you need two things:

    First, you need a JAVA-to-COM bridge like JACOB, COM4J or a similar tool. It is sufficient if it supports automation interfaces. It doesn't need to have full COM support.

    Second, using the JAVA-to-COM bridge, you should start Excel, load the Excel sheet, run the macro, save it and close Excel. So you have to call the equivalent of:

    Set Wb = Application.Workbooks.Open FileName
    Application.Run MacroName
    Wb.Save
    Application.Quit
    
    0 讨论(0)
  • 2020-12-15 02:35

    solution that works for me: java code:

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

    myVBS.vbs script:

    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 
    
    0 讨论(0)
  • 2020-12-15 02:38

    If you can't use JACOB or COM4J you can make a Visual Basic Script and run the script from your Java program.

    To create the script open notepad and write something like this:

    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
    

    Save it as myVBS.vbs and you can call it like this from your Java code:

    cmd = "you_path\\myVBS.vbs";
    Runtime.getRuntime().exec(cmd);
    
    0 讨论(0)
提交回复
热议问题