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

Export email data to specific fields in CSV file (or XLS file)

这是关于 Excel 和 Outlook 2013 -

我正在处理我需要的问题...

  1. 接收电子邮件
  2. 将该电子邮件自动移动到特定文件夹
  3. 将上述文件夹中的任何电子邮件导出到 .csv 文件
  4. 该文件中的数据必须放在特定的列下。

除了#4,我都能做到以上所有。该脚本根据断点将整个电子邮件正文放在不同的单元格中。

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

感兴趣的领域:Post一份工作
工作类型:全职
校园位置:蒙哥马利
----------------------
联系信息:

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

公司名称:Pershing, Yoakley & Associates
公司Phone:4042669876
公司传真号码:
公司网站:
业务类型:
----------------------
职位详情:

职位名称:医疗助理
开始日期:2016 年 8 月 1 日
工作类型:全职
薪资范围:$25,000
推荐来源:
----------------------
职位描述:
阿拉巴马州蒙哥马利的一家专业诊所正在寻找医疗助理。以前
有医疗实践经验者优先。候选人必须具有出色的
人际交往和客户服务技能,并且必须是积极主动的
和多任务处理者 – 协助医生检查和治疗
患者以及维护临床设备。


有意应聘者请将简历投递至 specialtyma@pyapc.com.
----------------------
申请流程:

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

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

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

以上加粗区域,必须属于以下区域:

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

如果你这样做:

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 文件中。

注意事项: none 要提取的值可以包含换行符(这可能是 "job description" 的问题),如果有的话的值可能包含一个逗号,在将它们写入 CSV 之前,您需要将它们包裹在 "" 中。