Как вызвать макрос Excel VBA из кода Java? - PullRequest
4 голосов
/ 17 октября 2011

Мне нужно создать лист Excel из данных, извлеченных из базы данных через Java. Для этого мне нужно вызвать некоторые функции VBA Macro при создании этого Excel. Кто-нибудь может мне помочь с тем, как вызвать VBA Macro из кода Java?

Ответы [ 5 ]

7 голосов
/ 17 октября 2011

Я не совсем понимаю ваш общий подход к созданию листа Excel из данных в базе данных.Обычно я бы использовал Apache POI, предложенный Vivek.

Однако, если вам действительно нужно вызвать макрос Excel на листе, вам понадобятся две вещи:

Во-первых, вам нужномост JAVA-COM, например JACOB , COM4J или аналогичный инструмент.Достаточно, если он поддерживает интерфейсы автоматизации.Для этого не требуется полная поддержка COM.

Во-вторых, используя мост JAVA-COM, вы должны запустить Excel, загрузить лист Excel, запустить макрос, сохранить его и закрыть Excel.Таким образом, вы должны назвать эквивалент:

Set Wb = Application.Workbooks.Open FileName
Application.Run MacroName
Wb.Save
Application.Quit
5 голосов
/ 27 августа 2015

Если вы не можете использовать JACOB или COM4J, вы можете создать сценарий 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);
0 голосов
/ 16 мая 2018

решение, которое работает для меня: код 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 
0 голосов
/ 17 октября 2011

Вы также можете иметь возможность записывать событие в Excel, когда рабочий лист изменяется, вы можете даже вызывать любой макрос, который вам нужен, поэтому, если вы хотите вызвать макрос «Синий», вы можете написать «синий» в скрытый лист, затем Excel запишет изменение, когда вы запишете изменение, вы увидите, что было написано, и сделаете несколько операторов ifelse, чтобы добраться до макроса, который вы хотите вызвать для этого экземпляра. Не очень хорошее кодирование, но легкий обходной путь. Я бы сам сделал другие методы.

0 голосов
/ 17 октября 2011

Я не уверен, можно ли вызывать макрос напрямую из Java. Но вы можете заполнить данные в таблице Excel и вызвать макрос, когда пользователь впервые открывает таблицу Excel. Вы сможете заполнить данные в таблице Excel, содержащей макросы, с помощью инструмента Apache POI - http://poi.apache.org/spreadsheet/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...