【发布时间】:2014-12-08 08:02:39
【问题描述】:
我经常收到格式一致的电子邮件,其中包含我想提取的数据以存储在 microsoft dynamics CRM 中。我相信最简单的方法是使用 VBA 将其导入 excel,然后使用 autohotkey 将其传输到 Web 表单中。
到目前为止,我有以下代码可以从电子邮件中提取数据,但我遇到了无关换行符的问题,希望得到一些反馈。
数据如下
Hi there, hope you are ok, lead is below.
-----Original Message-----
From: header waffle
The lead came through from the Lead Source: WEB FORM.
Date Received via Web: 10/10/2014 8:59 AM
Lead Information:
Their interests are: Orion water analysis instruments, Orion™ pH Electrode Filling Solution
blablabla
Name: Joe Bloggs
Company: Generic Co.
Address:
line 1 line 2
Line 3 line 4
United Kingdom
Phone:
Email: email@address.com
Lead Notes: REF#:300100229
SKU:9003011
QTY:1
Customer Comments:
ELMS ID: 00Q131M4f9vEAB
If you have any questions about this message, please contact me
Thank you.
我基于这个VBA Outlook. Trying to extract specific data from email body and export to Excel 编写代码,但是因为我正在处理更多不在并发行上的数据,所以它变得很麻烦,特别是因为所有额外的行返回。如何将数据剥离为我想要的,有没有更好的方法来处理多个数据片段?
代码如下:
Sub Extract()
On Error GoTo 0
Set myOlApp = Outlook.Application
Set mynamespace = myOlApp.GetNamespace("mapi")
Dim ThermoMail As Outlook.MailItem
Set ThermoMail = Application.ActiveInspector.CurrentItem
'open the current folder, I want to be able to name a specific folder if possible…
'Set myfolder = myOlApp.ActiveExplorer.CurrentFolder
Set xlobj = CreateObject("excel.application.14")
xlobj.Visible = True
xlobj.Workbooks.Add
'Set Headings
xlobj.Range("A" & 1).Value = "Date Received via Web"
xlobj.Range("A" & 2).Value = "Their interests are"
xlobj.Range("A" & 3).Value = "Name"
xlobj.Range("A" & 4).Value = "Company"
xlobj.Range("A" & 5).Value = "Address"
xlobj.Range("A" & 6).Value = "Phone"
xlobj.Range("A" & 7).Value = "Email" '
xlobj.Range("A" & 8).Value = "Lead Notes"
xlobj.Range("A" & 9).Value = "SKU"
xlobj.Range("A" & 10).Value = "QTY"
xlobj.Range("A" & 11).Value = "Customer Comments"
xlobj.Range("A" & 11).Value = ""
Dim msgText As String
msgText = ThermoMail.Body
'search for specific text
Dim delimtedMessage, Delim1 As String
Delim1 = "###"
delimtedMessage = Replace(delimtedMessage, "Date Received via Web:", "Delim1")
delimtedMessage = Replace(delimtedMessage, "Their interests are:", "Delim1")
delimtedMessage = Replace(msgText, "Purchasing Timeframe:", "Delim1")
delimtedMessage = Replace(msgText, "Name:", "Delim1")
delimtedMessage = Replace(delimtedMessage, "Company:", "Delim1")
delimtedMessage = Replace(delimtedMessage, "Address:", "Delim1")
delimtedMessage = Replace(delimtedMessage, "Phone:", "Delim1")
delimtedMessage = Replace(delimtedMessage, "Email:", "Delim1")
delimtedMessage = Replace(delimtedMessage, "Lead Notes:", "Delim1")
delimtedMessage = Replace(delimtedMessage, "SKU:", "Delim1") '
delimtedMessage = Replace(delimtedMessage, "QTY:", "Delim1")
delimtedMessage = Replace(delimtedMessage, "Customer Comments:", "Delim1")
delimtedMessage = Replace(delimtedMessage, "ELMS", "Delim1") 'everything after this should be discarded
messageArray = Split(delimtedMessage, "Delim1")
'write to excel
'xlobj.Range("B" & 1).Value = messageArray(0) intentionally discarded
xlobj.Range("B" & 1).Value = Trim(messageArray(1))
xlobj.Range("B" & 2).Value = Trim(messageArray(2))
xlobj.Range("B" & 3).Value = Trim(messageArray(3))
xlobj.Range("B" & 4).Value = Trim(messageArray(4))
xlobj.Range("B" & 5).Value = messageArray(5)
xlobj.Range("B" & 6).Value = messageArray(6)
xlobj.Range("B" & 7).Value = messageArray(7)
xlobj.Range("B" & 8).Value = messageArray(8)
xlobj.Range("B" & 9).Value = messageArray(9)
xlobj.Range("B" & 10).Value = messageArray(10)
xlobj.Range("B" & 11).Value = messageArray(11)
End Sub
【问题讨论】:
-
首先这将失败:
xlobj.Range("A" & 1).Value,然后delimtedMessage在使用前从未初始化,所以一切都是""。此外,您应该删除 Delim1 的 ",以便Replace(delimtedMessage, "Date Received via Web:", Delim1)和Split(delimtedMessage, Delim1)。我会用 vbCrLf 拆分身体。
标签: excel vba email outlook export-to-excel