2010-02-20 3 views
1

Каков наилучший способ экспортировать почту из папки Outlook 2007 в файл CSV? Я также хотел бы включить почтовые сообщения в подпапки. Встроенный экспортер csv не позволяет включать вложенные папки, но в остальном делает именно то, что я хочу.экспорт Outlook 2007 почтовая папка и вложенные папки в csv

ответ

2

Я бы сказал, что Office Automation - это путь сюда. Если у вас установлен Excel, вы можете напрямую вставить свойства в ячейки на листе. Вы можете написать макрос в Excel для автоматизации внешнего вида, или вы можете написать макрос в 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 

Маркус

+0

Маркус, спасибо большое за предоставление этого сценария! Это сработало отлично с первой попытки. Единственное изменение, которое мне нужно было сделать, это вынуть запятые из полей, потому что у меня были предметы с запятыми. Я также просмотрел объект MailItem, чтобы получить доступ к другим полям. Большое вам спасибо, вы спасли мне много времени, выясняя это самостоятельно! – Noel

+0

Btw, мне очень нравится возможность выбора папки вместо жесткого кодирования ее в скрипт, приятно :) – Noel

Смежные вопросы