Вызов кода VBA из Java - PullRequest
       10

Вызов кода VBA из Java

10 голосов
/ 26 июля 2011

Привет StackOverflow,

Я искал в большом Интернете и был обременен многочисленными тратами постов или ответов, которые объясняют прямо противоположный порядок моих попыток.

У меня есть файл Excel с большим набором кода VBA.Существует 4 общедоступных подпрограммы, которые не принимают параметров, которые могут быть вызваны пользователем при открытии документа в Excel, они манипулируют данными на различных листах по мере необходимости.У нас есть большое Java-приложение, которое мы хотели бы взаимодействовать с этим документом, вызывая макросы из среды Java.Дело в том, что нам нужно написать код VBA только один раз, и тогда Java сможет вызвать его для выполнения.Кроме того, мы хотим предположить, что пользователь приложения Java не обязательно имеет немедленный доступ к Excel, но работает на компьютере с Windows.Как это сделать?

Скомпилируем ли мы код VBA в DLL и вызываем его из Java?Как вы компилируете DLL, требует ли это использования Visual Studio?Как мы называем DLL из Java?Должны ли мы попробовать какой-нибудь COM-объект?

Обратите внимание, что как наиболее распространенный ответ на мой вопрос в другом месте, я довольно четко понимаю, как вызывать Java из VBA, а не вызывать VBA из Java.

Заранее спасибо.

1 Ответ

8 голосов
/ 26 июля 2011

Я в основном вижу три варианта вызова кода VBA в Excel из приложения Java:

  1. Java COM Bridge : доступно несколько инструментов, позволяющих вызывать компоненты автоматизации COM или COM из Java. Excel является таким компонентом. Я знаю о Джейкобе и JCom , но таких инструментов может быть больше.

  2. Java / VBScript / COM Automation : Поскольку вам, очевидно, не нужно передавать данные в код VBA, простейшим решением, вероятно, является написание VBScript, который запускает Excel, открывает документ , вызывает макрос и закрывает Excel. Этот скрипт запускается из Java с Runtime.getRuntime().exec("cmd /c start script.vbs");

  3. JNI : Вы можете написать конкретную DLL для своих приложений. Он реализует интерфейс JNI, поэтому его можно вызывать из Java. И его реализация использует вызовы COM для работы с Excel. Такая DLL лучше всего написана на VisualStudio, и она поддерживает C ++ для вызова COM-объектов.

Каким бы ни было ваше решение, вы в основном хотите выполнить следующие команды в интерфейсе автоматизации Excel (пример в VBScript):

Dim xl
Set xl = CreateObject("Excel.Application")
xl.Workbooks.Open ("workbook.xlsx")
xl.Application.Run "MyMacro"
xl.Application.Quit
Set xl = Nothing 

Вы не можете скомпилировать код VBA в DLL. Для этого не существует инструмента (в отличие от полной версии Visual Basic).

Надеюсь, этот ответ полезен, хотя я не понял, что вы подразумеваете под: "мы хотим предположить, что пользователь приложения Java не обязательно имеет немедленный доступ к Excel, но работает на Windows machine. "

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