#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 для вызова макроса.