Как вызвать макрос из библиотеки Apache POI на Java?
У меня есть:
Макрос с именем "process", который выполняет всю работу по обработке для моих рабочих листов.
Я хочу, чтобы мой Java-код, использующий Apache POI, вызывал этот макрос, чтобы он мог обрабатывать листы для меня.
Как я могу вызвать макрос в Apache POI на Java ?
:: Примечание ::
Я использую
import org.apache.poi.ss.usermodel
в Apache POI.Пожалуйста, дайте пример кода. (Я новичок в этом деле. Apache POI и сама Java.)
3 ответа:
Я не думаю, что это возможно. POI-это библиотека для чтения / редактирования офисных файлов, макросы-это совсем другое животное. Для этого необходимо реализовать интерпретатор Visual Basic для приложений в POI. Макросы, которые уже есть в книге Excel, сохраняются, но вы не можете добавлять новые или вызывать существующие.
Вы можете использовать другой инструмент, например com4j. Я создал POC только сегодня и работает как шарм. Просто выполните следующие действия:
- загрузите последнюю версию здесь
- используя Apache Ant построим выборку: samples\excel
С помощью кода, сгенерированного tlbimp (это всего лишь часть com4j), создайте небольшое приложение и напишите код типа:
// Starts excel and open an existing workbook _Application app = ClassFactory.createApplication(); app.setVisible(0, true); _Workbook wb = app.getWorkbooks().open("c:\\test.xlsx", null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0); // run a macro Variant macro = new Variant(Variant.Type.VT_BSTR); macro.set("my_macro"); wb.getApplication().run(macro, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null); // Save the excel file and quit Variant saveBeforeExit = new Variant(Variant.Type.VT_BOOL); saveBeforeExit.set(1); wb.close(saveBeforeExit, Variant.getMissing(), Variant.getMissing(), 0); app.quit();
Дополнительные примеры: com4j учебники