如何在Outlook中将多个文件夹/子文件夹中的邮件导出到Excel?
如果依赖手动方法或有限的Outlook功能,从多个文件夹或子文件夹导出邮件到Excel可能是一项繁琐的任务。幸运的是,有更高效的方法可以实现这一目标。本文将探讨两种方法:基于VBA的方法和使用Kutools for Outlook更快、更友好的解决方案。虽然VBA方法提供了灵活性,但其设置和调整较为复杂。相比之下,Kutools for Outlook提供了一种简单而强大的方式,只需点击几下即可将邮件导出到Excel,为您节省时间和精力。让我们深入了解细节。
使用VBA从多个文件夹/子文件夹导出邮件到Excel (复杂但灵活)
使用Kutools for Outlook从文件夹/子文件夹导出邮件到Excel 👍(高效且用户友好)
使用VBA从多个文件夹/子文件夹导出邮件到Excel
如果您熟悉编码并需要可定制的解决方案,使用VBA会非常有效。此方法允许您指定多个文件夹或子文件夹,并将其邮件导出到单独的Excel文件中。然而,这需要技术知识并对代码进行仔细的自定义。
步骤1:打开VBA编辑器
按 Alt + F11 启动“Microsoft Visual Basic for Applications”窗口。
步骤2:插入新模块
点击“插入” > “模块”,然后将以下VBA代码粘贴到新的模块窗口中。
VBA:从多个文件夹和子文件夹导出邮件到Excel
Const MACRO_NAME = "Export Outlook Folders to Excel"
Sub ExportMain()
ExportToExcel "destination_folder_path\A.xlsx", "your_email_account\folder\subfolder_1"
ExportToExcel "destination_folder_path\B.xlsx", "your_email_account\folder\subfolder_2"
MsgBox "Process complete.", vbInformation + vbOKOnly, MACRO_NAME
End Sub
Sub ExportToExcel(strFilename As String, strFolderPath As String)
Dim olkMsg As Object
Dim olkFld As Object
Dim excApp As Object
Dim excWkb As Object
Dim excWks As Object
Dim intRow As Integer
Dim intVersion As Integer
If strFilename <> "" Then
If strFolderPath <> "" Then
Set olkFld = OpenOutlookFolder(strFolderPath)
If TypeName(olkFld) <> "Nothing" Then
intVersion = GetOutlookVersion()
Set excApp = CreateObject("Excel.Application")
Set excWkb = excApp.Workbooks.Add()
Set excWks = excWkb.ActiveSheet
With excWks
.Cells(1, 1) = "Subject"
.Cells(1, 2) = "Received"
.Cells(1, 3) = "Sender"
End With
intRow = 2
For Each olkMsg In olkFld.Items
If olkMsg.Class = olMail Then
excWks.Cells(intRow, 1) = olkMsg.Subject
excWks.Cells(intRow, 2) = olkMsg.ReceivedTime
excWks.Cells(intRow, 3) = GetSMTPAddress(olkMsg, intVersion)
intRow = intRow + 1
End If
Next
Set olkMsg = Nothing
excWkb.SaveAs strFilename
excWkb.Close
Else
MsgBox "The folder '" & strFolderPath & "' does not exist in Outlook.", vbCritical + vbOKOnly, MACRO_NAME
End If
Else
MsgBox "The folder path was empty.", vbCritical + vbOKOnly, MACRO_NAME
End If
Else
MsgBox "The filename was empty.", vbCritical + vbOKOnly, MACRO_NAME
End If
Set olkMsg = Nothing
Set olkFld = Nothing
Set excWks = Nothing
Set excWkb = Nothing
Set excApp = Nothing
End Sub
Public Function OpenOutlookFolder(strFolderPath As String) As Outlook.MAPIFolder
Dim arrFolders As Variant
Dim varFolder As Variant
Dim bolBeyondRoot As Boolean
On Error Resume Next
If strFolderPath = "" Then
Set OpenOutlookFolder = Nothing
Else
Do While Left(strFolderPath, 1) = "\"
strFolderPath = Right(strFolderPath, Len(strFolderPath) - 1)
Loop
arrFolders = Split(strFolderPath, "\")
For Each varFolder In arrFolders
Select Case bolBeyondRoot
Case False
Set OpenOutlookFolder = Outlook.Session.Folders(varFolder)
bolBeyondRoot = True
Case True
Set OpenOutlookFolder = OpenOutlookFolder.Folders(varFolder)
End Select
If Err.Number <> 0 Then
Set OpenOutlookFolder = Nothing
Exit For
End If
Next
End If
On Error GoTo 0
End Function
Function GetSMTPAddress(Item As Outlook.MailItem, intOutlookVersion As Integer) As String
Dim olkSnd As Outlook.AddressEntry
Dim olkEnt As Object
On Error Resume Next
Select Case intOutlookVersion
Case Is < 14
If Item.SenderEmailType = "EX" Then
GetSMTPAddress = SMTPEX(Item)
Else
GetSMTPAddress = Item.SenderEmailAddress
End If
Case Else
Set olkSnd = Item.Sender
If olkSnd.AddressEntryUserType = olExchangeUserAddressEntry Then
Set olkEnt = olkSnd.GetExchangeUser
GetSMTPAddress = olkEnt.PrimarySmtpAddress
Else
GetSMTPAddress = Item.SenderEmailAddress
End If
End Select
On Error GoTo 0
Set olkSnd = Nothing
Set olkEnt = Nothing
End Function
Function GetOutlookVersion() As Integer
Dim arrVer As Variant
arrVer = Split(Outlook.Version, ".")
GetOutlookVersion = arrVer(0)
End Function
Function SMTPEX(olkMsg As Outlook.MailItem) As String
Dim olkPA As Outlook.propertyAccessor
On Error Resume Next
Set olkPA = olkMsg.propertyAccessor
SMTPEX = olkPA.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x5D01001E")
On Error GoTo 0
Set olkPA = Nothing
End Function
步骤3:自定义VBA代码
- 将上述代码中的“destination_folder_path”替换为实际的文件夹路径,例如“C:\Users\DT168\Documents\TEST”。
- 替换“your_email_account\folder\subfolder_1” 和 “your_email_account\folder\subfolder_2” 为您的Outlook文件夹路径,例如“Kelly@extendoffice.com\收件箱\A” 和 “Kelly@extendoffice.com\收件箱\B".
步骤4:运行代码
按“F5”或点击“运行”按钮执行代码。然后在弹出的“将Outlook文件夹导出到Excel”对话框中点击“确定”按钮。现在,所有指定文件夹/子文件夹中的邮件都已导出到Excel工作簿中。
缺点:
- 复杂设置:需要仔细调整代码并具备VBA的工作知识。
- 容易出错:自定义过程中的小错误可能导致错误或导出不完整。
- 耗时:不适合快速或频繁导出。
通过批量处理彻底改变您的邮件管理!
厌倦了重复的邮件任务? Kutools for Outlook 提供“批量处理”工具,帮助您简化工作流程并节省宝贵时间。
- 🌟 批量回复多封邮件:使用模板轻松发送批量回复。
- 📧 单独转发:将多封邮件作为普通消息转发,而不是作为附件。
- 📝 保存为多种格式:一键将邮件导出为PDF、Word、Excel等多种格式!

使用 Kutools for Outlook 从文件夹/子文件夹导出邮件到 Excel 👍
为了更快捷、无忧的操作,“Kutools for Outlook” 提供了“将选中的邮件保存为多种格式文件”的功能。这种方法因其简便性、速度和多功能性而备受推荐。无论您是在管理少量邮件还是大数据集,Kutools 都能确保以最少的努力获得无缝体验。
使用Kutools for Outlook解锁无与伦比的邮件处理效率!永久免费获取 70 项强大功能。立即下载免费版本!
步骤1:选择文件夹或子文件夹
导航到包含要导出邮件的文件夹或子文件夹。按 Ctrl + A 选择列表中的所有邮件。
步骤2:访问“将选中的邮件保存为多种格式文件”功能
点击“Kutools” > “批量处理” > “将选中的邮件保存为多种格式文件”。
步骤3:配置导出设置
- 在“保存邮件为其他文件”对话框中,选择要保存文件的目标文件夹。
- 选择“Excel 格式”选项。
- 在“保存内容”部分选择要导出的具体邮件内容(例如,邮件头、正文)。
步骤4:完成导出
点击“确定”开始导出过程。完成后,您将在指定文件夹中找到所有已保存为单独Excel文件的邮件。
优点:
- 快速直观:只需点击几下即可将邮件导出到Excel——无需技术技能。
- 可定制输出:选择特定的文件格式和内容以满足您的需求。
- 无错误过程:避免与VBA方法相关的复杂性和潜在错误。
- 专业结果:非常适合创建有序记录或高效共享数据。
最佳办公生产力工具
重磅消息:Kutools for Outlook 推出免费版本!
体验全新 Kutools for Outlook 免费版本,拥有 70 多项令人惊叹的功能,永久免费使用!立即点击下载!
🤖 Kutools AI :利用先进的人工智能技术轻松处理电子邮件,包括回复、总结、优化、扩展、翻译和撰写邮件。
📧 邮件自动化:自动答复(支持 POP 和 IMAP) / 定时发送邮件 / 按规则自动抄送密送 / 自动转发(高级规则) / 自动添加问候语 / 自动将多收件人邮件拆分为单独消息 ...
📨 邮件管理:撤回邮件 / 按主题和其他条件阻止垃圾邮件 / 删除重复邮件 / 高级搜索 / 整合文件夹 ...
📁 附件增强功能:批量保存 / 批量拆离 / 批量压缩 / 自动保存 / 自动拆离 / 自动压缩 ...
🌟 界面魔法:😊更多漂亮酷炫的表情符号 / 当重要邮件到达时提醒您 / 最小化 Outlook 而不是关闭 ...
👍 一键奇效:带附件回复所有人 / 反钓鱼邮件 / 🕘显示发件人的时区 ...
👩🏼🤝👩🏻 联系人和日历:从选定的邮件中批量添加联系人 / 将联系人组拆分为单独的组 / 移除生日提醒 ...
单击即可立即解锁 Kutools for Outlook。不要再等待,现在就下载并提升您的效率!

