将电子邮件数据导出到 CSV 文件(或 XLS 文件)中的特定字段
Export email data to specific fields in CSV file (or XLS file)
这是关于 Excel 和 Outlook 2013 -
我正在处理我需要的问题...
- 接收电子邮件
- 将该电子邮件自动移动到特定文件夹
- 将上述文件夹中的任何电子邮件导出到 .csv 文件
- 该文件中的数据必须放在特定的列下。
除了#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 之前,您需要将它们包裹在 "" 中。
这是关于 Excel 和 Outlook 2013 -
我正在处理我需要的问题...
- 接收电子邮件
- 将该电子邮件自动移动到特定文件夹
- 将上述文件夹中的任何电子邮件导出到 .csv 文件
- 该文件中的数据必须放在特定的列下。
除了#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 之前,您需要将它们包裹在 "" 中。