【问题标题】:export outlook 2007 mail folder and subfolders to csv将 Outlook 2007 邮件文件夹和子文件夹导出到 csv
【发布时间】:2010-02-20 02:36:35
【问题描述】:

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

【问题讨论】:

    标签: csv outlook export outlook-2007 export-to-excel


    【解决方案1】:

    我会说办公自动化是通往这里的道路.. 如果您安装了 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  
    

    马库斯

    【讨论】:

    • Marcus,非常感谢您提供这个脚本!第一次尝试时效果很好。我需要做的唯一改变是从字段中取出逗号,因为我的主题中有逗号。我还查找了 MailItem 对象,以便可以访问其他字段。非常感谢,您为我自己解决这个问题节省了很多时间!
    • 顺便说一句,我真的很喜欢能够选择文件夹而不是将其硬编码到脚本中的功能,很好:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    相关资源
    最近更新 更多