将电子邮件数据导出到CSV文件(或XLS文件)中的特定字段

时间:2016-07-29 18:08:20

标签: excel vba csv export export-to-csv

这是关于Excel&展望2013 -

我正在解决我需要的问题......

  1. 接收电子邮件
  2. 将该电子邮件自动移至特定文件夹
  3. 将所述文件夹中的任何电子邮件导出为.csv文件
  4. 该文件中的数据必须放在特定列下。
  5. 除了#4,我可以实现上述所有目标。该脚本根据断点将电子邮件的整个主体放在不同的单元格中。

    以下是我需要导出的电子邮件的副本:

    兴趣范围:发布职位
    工作类型:全职
    校园位置:蒙哥马利
    ---------------------
    联系信息:

    职称:经理 联系姓氏:Wilson
    联系人姓名:Allison
    地址:北京市桃树路3424号 城市:亚特兰大 州:格鲁吉亚
    邮编:30326
    电话:4042669876
    电子邮件:specialtyma@pyapc.com
    ---------------------
    公司信息:

    公司名称:Pershing,Yoakley&员工
    公司电话:4042669876
    公司传真号码:
    公司网站:
    业务类型:
    ---------------------
    工作细节:

    职位名称:医疗助理
    开始日期:2016年8月1日
    工作类型:全职
    薪资范围:25,000美元
    推荐来源:
    ---------------------
    职位描述:
    在蒙哥马利的一个专业实践,AL寻求医疗助理。之前的医疗实践经验是优选的。考生必须具备良好的人际关系和客户服务技能,必须是自学者和多任务者 - 协助医生对患者进行检查和治疗以及维护临床设备。

    有意者请将简历提交至specialma@pyapc.com ---------------------
    申请程序:

    ---------------------
    招聘流程:

    电话采访:是的 背景检查:是
    参考检查:是
    信用检查:否 技术测试:没有 人格测试:没有 体检:没有 驾驶记录:否 其他:没有 ---------------------
    要求接收简历的方式:

    传真:否
    邮件:没有 电子邮件:是
    亲自申请:没有 在线申请:否
    ---------------------
    其他要求:

    上述粗体区域必须属于以下几个方面:

    Job Title | Company Name | Description | Contact Name | Contact Email | Zip | Salary | Start Date |
    

    这是我到目前为止所提到的(参考上面的#1-3)...我已将其置于Outlook的 ThisOutlookSession 中。

    无论是否加粗,都不应该使用CSV格式。

    Option Explicit 
    Private WithEvents Items As Outlook.Items
    
    Private Sub Application_Startup()
    
        Dim olApp As Outlook.Application
        Dim objNS As Outlook.NameSpace
        Set olApp = Outlook.Application
        Set objNS = olApp.GetNamespace("MAPI")
    
         '// The INCOMING JOBS folder must be a folder of the INBOX.
    
        Set Items = objNS.GetDefaultFolder(olFolderInbox).Folders("Incoming Jobs").Items
    
    End Sub
    Private Sub Items_ItemAdd(ByVal item As Object)
    
        On Error GoTo ErrorHandler
    
        Dim Msg As Outlook.MailItem
    
        Dim iFile As Integer
    
        If TypeName(item) = "MailItem" Then
    
    
    
            Set Msg = item
    
            iFile = FreeFile
            Open "C:\Temp\INCOMING_JOBS.CSV" For Append As #iFile
    
            Print #iFile, Replace(Msg.Body, vbCrLf, ",")
            Close #iFile
    
        End If
    
    ExitPoint:
    
        Exit Sub
    
    ErrorHandler:
    
        MsgBox Err.Number & " - " & Err.Description
        Resume ExitPoint
    
         '// Debug only
        Resume
    
    End Sub
    

1 个答案:

答案 0 :(得分:2)

如果你这样做:

Print #iFile, Replace(Msg.Body, vbCrLf, ",")
然后,它会将所有内容保存到文件中。

您需要做的是首先将vbCrLf上的文件拆分为一个行数组:

Dim arr
arr = Split(Msg.Body, vbCrLf)

然后你需要遍历那些寻找你想要提取的特定行的行:最好把它放到你可以从主代码中调用的函数中:

未测试:

Function LineContent(arr, txtHeader) as String
    Dim rv as string, i as long
    for i=lbound(arr) to ubound(arr)
        if arr(i) Like txtHeader & "*" then
            rv = trim(replace(arr(i),txtHeader,"")
            exit for
        end if
    next i

    LineContent = rv
End function

然后调用这个函数:

Dim cLastName as String
cLastName = LineContent(arr, "Contact Last Name:")

获得所需的所有变量后,可以将它们一行附加到CSV中。

警告:您要提取的值中没有一个可以包含换行符(这可能是"作业说明"的问题),并且如果任何值可能包含一个逗号,你需要将它们包装在""在将它们写入CSV之前。