Сгенерируйте Excel с помощью Java и создайте макрос в Excel

#java #excel #vba #outlook #apache-poi

#java #excel #vba #outlook #apache-poi

Вопрос:

У меня есть Java-код, который берет данные из MongoDB и позже создает excel (.xls), содержащий эти данные, используя Apache POI, но в отформатированном виде.

Мое последнее требование — отправить последний лист внутри листа Excel по электронной почте с набором идентификаторов почты. Я не могу использовать Java mail API для этого, поскольку мне не будут предоставлены данные SMTP почтового ящика. На данный момент я планирую создать макрос внутри сгенерированного Excel для отправки данных. Макрос, который я создал для отправки почты, является:

 Sub Send_Selection_Or_ActiveSheet_with_MailEnvelope()
'Working in Excel 2002-2016
    Dim Sendrng As Range

    On Error GoTo StopMacro

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    'Note: if the selection is one cell it will send the whole worksheet
    Set Sendrng = Selection

    'Create the mail and send it
    With Sendrng

        ActiveWorkbook.EnvelopeVisible = True
        With .Parent.MailEnvelope

            ' Set the optional introduction field thats adds
            ' some header text to the email body.
            .Introduction = "This is a test mail."

            With .Item
                .To = "iamnithinprakash@gmail.com"
                .Subject = "My subject"
                .Send
            End With

        End With
    End With

StopMacro:
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
    ActiveWorkbook.EnvelopeVisible = False

End Sub
  

Но я не знаю, как создать этот макрос с помощью java.

Ответ №1:

OP спрашивает, как создать таблицу Excel, используя библиотеку Apache POI, которая включает макросы. К сожалению: это невозможно.

Цитирование ограничений POI:

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

К счастью, это продолжается:

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

Итак, что могло получиться:

  • вы создаете пустой лист Excel «вручную» с помощью Excel, который включает ваш макрос
  • вы используете POI для добавления данных в такой существующий лист
  • вы сохраняете это «вместе» на новом листе

(или какой-либо вариант этого, например, создайте этот пустой шаблон, скопируйте его и откройте / обновите одну из копий)

Комментарии:

1. Спасибо @GhostCat. Это хорошая идея, но я не могу создать файл Excel вручную. Это часть веб-сервиса, и таблица Excel генерируется в зависимости от предоставленных входных данных.

2. Итак, похоже, что если мне нужно добавить макрос в таблицу Excel, то мне придется создать Excel, используя плагин, отличный от poi.

3. @NITKRISHВ каком формате вы создаете файл Excel? Старый формат .xls или более новый формат .xlsx? Вы написали xls , но я хочу, чтобы это было подтверждено

4. @GhostCat да, я создаю файл .xls.

5. Я думаю, что ваша идея намного лучше. Я выделил эту конкретную функциональность и добавляю Excel, не содержащий данных, а только макрос. Я попробую использовать какой-нибудь мост JAVA-to-COM для вызова макроса.