ESAP达摩院 思想有多远,我们就能走多远

ES如何实现将本表当附件发送邮件


需求

采购订单在ES中生成,审批后需要把本表导出成pdf或excel发送给供应商。

基本思路

  • ES本身没有这种功能,据说高版本有,但估计也不能导出pdf。

  • 所以实现必须借助vba,office2007+版本有pdf插件或自带pdf插件,可以另存pdf,然后通过vba发送给smtp邮件服务器,按照这个思路即可实现。

示例模板

VBA代码

  • 加入VBA代码,实现自动转存pdf和发邮件,示例会同时发送pdf和excel版。
Sub send()
Dim NameSpace$, Email As Object, mypath$
    ' 本表另存pdf
    On Error Resume Next
    Application.ScreenUpdating = False ' 关闭屏幕刷新

    If Application.Version < 12 Then
        MsgBox "此功能用于Excel2007以上"
        Exit Sub
    End If

    mypath = ThisWorkbook.Path
    
    'VBA.MkDir (mypath & "/PDF")
    
    ' 导出pdf
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=mypath & "\" & ThisWorkbook.Name & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

    ' 另存xls
    Set NewBook = Workbooks.Add
    Sheet2.Range("a:d").Copy NewBook.Worksheets("sheet1").Range("a:d") '复制A:D列
    NewBook.SaveAs Filename:=mypath & "\" & ThisWorkbook.Name & "-副本" & ".xls"
    NewBook.Close SaveChanges:=True '关闭文件
  
    Application.ScreenUpdating = True ' 打开屏幕刷新
    
    ' 发送准备工作
    NameSpace = "http://schemas.microsoft.com/cdo/configuration/"
    Set Email = CreateObject("CDO.Message")
    Email.From = Sheet2.Range("g2")           ' 发件人邮箱=“辅助工作表”G2
    Email.To = Sheet2.Range("g5")             ' 要发往的地址=“辅助工作表”D列
    Email.Subject = Sheet2.Range("g4")        ' 标题=“辅助工作表”G4
    Email.Textbody = Sheet2.Range("g6")       ' 正文=“辅助工作表”C列+G6
    Email.AddAttachment mypath & "\" & ThisWorkbook.Name & ".pdf" '添加附件
    Email.AddAttachment mypath & "\" & ThisWorkbook.Name & "-副本" & ".xls" '添加附件
    With Email.Configuration.Fields
     .Item(NameSpace & "smtpusessl") = 0      ' 是否启用ssl
     .Item(NameSpace & "sendusing") = 2
     .Item(NameSpace & "smtpserver") = "smtp.163.com" ' 发送邮件服务器
     .Item(NameSpace & "smtpserverport") = "25"
     .Item(NameSpace & "smtpauthenticate") = 1
     .Item(NameSpace & "sendusername") = Sheet2.Range("g2")    ' 发件人邮箱
     .Item(NameSpace & "sendpassword") = Sheet2.Range("g3")     '发件人密码
     .Update
    End With
    Email.send ' 发送
    
    MsgBox "文件已经发送完成。"
    
    Kill mypath & "\" & ThisWorkbook.Name & ".pdf" '删除所有的已经发送的附件
    Kill mypath & "\" & ThisWorkbook.Name & "-副本" & ".xls" '删除所有的已经发送的附件

End Sub

配合ES

可以通过提数自动获取供应商对应的邮箱,通过回写记录发送历史。

Excel示例下载表格

@毛毛-vba导出本表为pdf发邮件.xls

贡献人

@挨踢熊 @毛毛

更多精彩功能请关注我们^_^


近似文章

下一篇 ES圈子杂谈