【问题标题】:Export email data to specific fields in CSV file (or XLS file)将电子邮件数据导出到 CSV 文件(或 XLS 文件)中的特定字段
【发布时间】:2016-12-04 12:55:17
【问题描述】:

这是关于 Excel 和 Outlook 2013 -

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

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

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

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

感兴趣的领域:发布工作
工作类型:全职
校园地点:蒙哥马利
---------------------
联系方式:

头衔:经理
联系人姓氏:Wilson
联系人名字:Allison
地址:3424 Peachtree Rd NE
城市:亚特兰大
州:乔治亚
邮编:30326
电话:4042669876
电子邮件:specialma@pyapc.com
---------------------
公司信息:

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

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


有兴趣的候选人应将简历提交至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

【问题讨论】:

  • 你见过This吗?
  • 我只是看了一下。但提取标准 Outlook 对象并不是困难的部分。困难的部分是提取电子邮件正文的特定部分,并将它们放在 CSV 中各自的单元格中。不过,好看!谢谢。

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


【解决方案1】:

如果你这样做:

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 之前将它们包装在 "" 中。

【讨论】:

  • ++ 不错 :) rv = trim(replace(arr(i),txtHeader & ":","")rv = trim(Split(arr(i),":")(1)
  • @SiddharthRout - 我在调用函数时在 txtHeader 中添加了“:”...
  • 是的,我看到了:D。
  • @TimWilliams - 关于换行符......段落行确实会中断,但它们不是来自手动输入网络表单上的换行符。它以一行文本的形式出现。这会作为一个单元格进入 CSV 吗?
  • 是的,它应该:它确实包含逗号,但请务必将其包裹在 "" 中。如果任何值可以包含 ",那么您需要通过将它们加倍来转义它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
相关资源
最近更新 更多