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
1
A
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
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
Btw, j'aime vraiment la fonctionnalité de pouvoir choisir le dossier au lieu de le coder en dur dans le script, sympa :) – Noel