使用Java生成Excel并在Excel中创建宏

时间:2019-03-07 12:44:23

标签: java excel vba apache-poi outlook-vba

我有一个Java代码,该代码从MongoDB中获取数据,然后使用Apache POI以格式化的方式创建一个包含该数据的excel(.xls)。

我的最终要求是将excel工作表中的最后一个工作表邮寄到一组邮件ID。我无法使用Java邮件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 个答案:

答案 0 :(得分:2)

OP询问如何使用包含宏的Apache POI库创建Excel工作表。不幸的是:这是不可能的。

引用POI limitations

  

无法创建宏。目前尚无计划支持宏。

幸运的是,它继续:

  

但是,读取和重写包含宏的文件将安全地保留宏。

那么,可以可以解决什么:

  • 您使用Excel“手动”创建一个 Excel工作表,其中包含您的宏
  • 您使用POI将数据添加到这样的现有工作表中
  • 您将“一起”保存到新的表格中

(或其中的一些变化,例如创建该空模板,进行复制并打开/更新其中一份副本)