Как вызвать макрос из библиотеки Apache POI в Java? - PullRequest
9 голосов
/ 04 августа 2011

У меня есть:

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

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

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

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

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

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

Ответы [ 3 ]

10 голосов
/ 04 августа 2011

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

6 голосов
/ 26 сентября 2012

Вы можете использовать другой инструмент, например 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

4 голосов
/ 04 августа 2011

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

Макросы

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

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

...