Как вызвать макрос из библиотеки Apache POI на Java?


У меня есть:

  • Макрос с именем "process", который выполняет всю работу по обработке для моих рабочих листов.

  • Я хочу, чтобы мой Java-код, использующий Apache POI, вызывал этот макрос, чтобы он мог обрабатывать листы для меня.

  • Как я могу вызвать макрос в Apache POI на Java ?

:: Примечание ::

  • Я использую import org.apache.poi.ss.usermodel в Apache POI.

  • Пожалуйста, дайте пример кода. (Я новичок в этом деле. Apache POI и сама Java.)

3 9

3 ответа:

Я не думаю, что это возможно. POI-это библиотека для чтения / редактирования офисных файлов, макросы-это совсем другое животное. Для этого необходимо реализовать интерпретатор Visual Basic для приложений в POI. Макросы, которые уже есть в книге Excel, сохраняются, но вы не можете добавлять новые или вызывать существующие.

Вы можете использовать другой инструмент, например com4j. Я создал POC только сегодня и работает как шарм. Просто выполните следующие действия:

  1. загрузите последнюю версию здесь
  2. используя Apache Ant построим выборку: samples\excel
  3. С помощью кода, сгенерированного 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();
    
  4. Дополнительные примеры: com4j учебники

Я думаю, ты не можешь.

Макросы

Макросы не могут быть созданы. Однако чтение и переписывание файлов содержащие макросы будут безопасно сохранять макросы.

Ограничения POI Apache