1

将邮件从 Outlook 2007 文件夹导出到 CSV 文件的最佳方法是什么?我也想在子文件夹中包含邮件消息。内置的 csv 导出器不允许包含子文件夹的选项,但在其他方面完全符合我的要求。

4

1 回答 1

2

我会说 Office 自动化是去这里的方式。如果你安装了 Excel,你可以直接将属性插入到工作表上的单元格中。您可以在 Excel 中编写一个宏来自动化 Outlook,或者您可以在 Outlook 中编写一个宏来将数据推送到工作表中。

下面我为 Outlook 创建了一个快速的 VBA 并使用 FSO 来代替做脏活,它会给你一个框架来工作,它需要更多的错误处理测试等。

Sub SaveItemsToExcel()

    On Error GoTo ErrorHandlerExit


   Dim oNameSpace As Outlook.NameSpace
   Dim oFolder As Outlook.MAPIFolder
   'You must set a reference to the Microsoft Scripting Runtime library touse the FileSystemObject

   Dim objFS As Scripting.FileSystemObject
   Dim objOutputFile As Scripting.TextStream

   Set objFS = New Scripting.FileSystemObject
   Set objOutputFile = objFS.OpenTextFile("C:\Temp\Export.csv", ForWriting, True)
   Set oNameSpace = Application.GetNamespace("MAPI")
   Set oFolder = oNameSpace.PickFolder

   If oFolder Is Nothing Then
      GoTo ErrorHandlerExit
   End If


    ' Check if folder can contain Mail Items
    If oFolder.DefaultItemType <> olMailItem Then
      MsgBox "Folder does not contain mail messages"
      GoTo ErrorHandlerExit
    End If


   'Write header line
    objOutputFile.WriteLine "From,Subject,Recived"

    ProcessFolderItems oFolder, objOutputFile

    objOutputFile.Close

    Set oFolder = Nothing
    Set oNameSpace = Nothing
    Set objOutputFile = Nothing
    Set objFS = Nothing

ErrorHandlerExit:
   Exit Sub


End Sub

Sub ProcessFolderItems(oParentFolder As Outlook.MAPIFolder, ByRef objOutputFile As Scripting.TextStream)
    Dim oCount As Integer
    Dim oMail As Outlook.MailItem
    Dim oFolder As Outlook.MAPIFolder
    oCount = oParentFolder.Items.Count

    For Each oMail In oParentFolder.Items
        If oMail.Class = olMail Then

        objOutputFile.WriteLine oMail.SenderEmailAddress & "," & oMail.Subject & "," & oMail.ReceivedTime

        End If
    Next oMail

    Set oMail = Nothing
    'check to see if we have an child folders
    If (oParentFolder.Folders.Count > 0) Then
            For Each oFolder In oParentFolder.Folders
                ProcessFolderItems oFolder, objOutputFile
            Next
    End If


End Sub  

马库斯

于 2010-02-20T13:20:14.870 回答