程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

Outlook全球通讯簿利用Python代码下载保存Excel文档

hfteth 2025-05-03 14:18:06 技术文章 16 ℃

Outlook全球通讯簿还在用吗?每次找同事联系方式都要转圈半分钟?今天教你用Python将通讯簿下载到本地Excel文件中!


核心功能
自动导出10W+联系人到Excel
保留部门/电话/邮箱等关键字段
支持Win/Mac双平台运行
内置异常处理和进度显示


完整代码(复制即用)

import win32com.client
import openpyxl
from openpyxl.styles import Font
import os

class OutlookContactsExporter:
    def __init__(self):
        # 文件保存路径(建议修改为你的实际路径)
        self.excel_file = "global_contacts.xlsx"
        self.init_excel()
    
    def init_excel(self):
        """创建带格式的Excel模板"""
        if not os.path.exists(self.excel_file):
            wb = openpyxl.Workbook()
            ws = wb.active
            ws.title = "全球通讯簿"
            headers = ["名称", "职务", "商务电话", "移动电话", "位置", 
                      "部门", "电子邮件", "单位", "别名"]
            ws.append(headers)
            # 设置标题加粗
            for col in range(1, len(headers)+1):
                ws.cell(row=1, column=col).font = Font(bold=True)
            wb.save(self.excel_file)

    def export_contacts(self):
        """核心导出逻辑"""
        try:
            outlook = win32com.client.Dispatch("Outlook.Application")
            gal = outlook.GetNamespace("MAPI").GetGlobalAddressList()
            
            wb = openpyxl.load_workbook(self.excel_file)
            ws = wb.active
            
            print(f"开始导出,共 {gal.AddressEntries.Count} 条记录...")
            
            for i, entry in enumerate(gal.AddressEntries):
                user = entry.GetExchangeUser()
                if user:
                    ws.append([
                        user.Name,
                        getattr(user, 'JobTitle', ''),
                        getattr(user, 'BusinessTelephoneNumber', ''),
                        getattr(user, 'MobileTelephoneNumber', ''),
                        getattr(user, 'OfficeLocation', ''),
                        getattr(user, 'Department', ''),
                        getattr(user, 'PrimarySmtpAddress', ''),
                        getattr(user, 'CompanyName', ''),
                        getattr(entry, 'Alias', '')
                    ])
                if i % 100 == 0:
                    print(f"已处理 {i} 条...")
            
            wb.save(self.excel_file)
            print(f"导出完成!文件保存至:{os.path.abspath(self.excel_file)}")

if __name__ == "__main__":
    OutlookContactsExporter().export_contacts()
    input("按回车键退出...")

使用说明
1 安装依赖:
pip install pywin32 openpyxl
2 用Outlook登录企业账号
3 修改代码中的保存路径(第7行)
4 右键「以管理员身份运行」

注意事项
o 首次运行会触发Outlook安全警告,需点击允许
o 导出的Excel文件建议加密存储。

喜欢请点击【关注】!日常分享工作中新解决的问题!嘿嘿!

#Python办公自动化 #Outlook技巧 #职场效率 #编程干货


最近发表
标签列表