2010-02-20 23 views
1

Quelle est la meilleure façon d'exporter le courrier d'un dossier Outlook 2007 vers un fichier CSV? Je souhaite également inclure les messages électroniques dans les sous-dossiers. L'exportateur csv intégré ne permet pas l'option d'inclure des sous-dossiers, mais fait exactement ce que je veux.Export Outlook 2007 dossier de courrier et sous-dossiers à csv

Répondre

2

Je dirais que Office Automation est la solution. Si vous avez installé Excel, vous pouvez directement insérer les propriétés dans les cellules sur une feuille de calcul. Vous pouvez écrire une macro dans Excel pour automatiser Outlook ou vous pouvez écrire une macro dans Outlook pour insérer les données dans une feuille de calcul.

Ci-dessous j'ai créé un morceau rapide de VBA pour Outlook et utilisé FSO pour faire le sale boulot à la place, il vous donnera un squelette de travailler à partir, il aura besoin de beaucoup plus de tests de gestion des erreurs, etc.

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

+0

Marcus, je vous remercie beaucoup pour fournir ce script! Cela a fonctionné parfaitement au premier essai. Le seul changement que je devais faire était de supprimer les virgules des champs parce que j'avais des sujets avec des virgules. J'ai également recherché l'objet MailItem afin que je puisse accéder aux autres champs. Merci beaucoup, vous m'avez épargné beaucoup de temps à trouver cela par moi-même! – Noel

+0

Btw, j'aime vraiment la fonctionnalité de pouvoir choisir le dossier au lieu de le coder en dur dans le script, sympa :) – Noel