pywin32 实现 Windows Office自动化的示例代码

 更新时间:2025年09月03日 11:23:10   作者:倔强老吕  
pywin32是Python操作Windows系统及Office套件的强大工具,通过COM 接口实现对Word、Excel、PowerPoint、Outlook等软件的自动化控制,感兴趣的可以了解一下

pywin32 是 Python 操作 Windows 系统及 Office 套件的强大工具,通过 COM 接口实现对 Word、Excel、PowerPoint、Outlook 等软件的自动化控制。

环境安装与准备

1. 安装 pywin32

pip install pywin32

2. 确保已安装 Office 软件

  • Microsoft Office 2010 或更高版本
  • 安装时勾选 "COM 加载项" 支持

Excel 自动化操作

1. 基础 Excel 操作

import win32com.client as win32

# 启动Excel应用
excel = win32.Dispatch('Excel.Application')
excel.Visible = True  # 可视化操作

# 创建工作簿
wb = excel.Workbooks.Add()
ws = wb.Worksheets(1)

# 单元格操作
ws.Cells(1, 1).Value = "Hello Excel"  # A1单元格
ws.Range("A2").Value = 123.45
ws.Range("A3:B3").Value = ["Python", "自动化"]

# 保存文件
wb.SaveAs(r'C:\test\demo.xlsx')
wb.Close()
excel.Quit()

2. 高级 Excel 功能

# 格式设置
ws.Range("A1:A3").Font.Bold = True
ws.Range("A1:A3").Font.Color = 0xFF0000  # 红色
ws.Columns(1).ColumnWidth = 20

# 公式应用
ws.Range("B4").Formula = "=SUM(A2:A3)"

# 图表创建
chart = ws.Shapes.AddChart2(240, win32.constants.xlColumnClustered).Chart
chart.SetSourceData(ws.Range("A1:B3"))

# 数据筛选
ws.Range("A1:B10").AutoFilter(Field:=1, Criteria1:=">100")

# 宏调用
excel.Application.Run("MacroName")

Word 自动化操作

1. 基础 Word 操作

word = win32.Dispatch('Word.Application')
word.Visible = True

# 新建文档
doc = word.Documents.Add()

# 内容操作
doc.Content.Text = "Python自动化Word文档\n"
paragraph = doc.Content.Paragraphs.Add()
paragraph.Range.Text = "第一段落内容"
paragraph.Range.Font.Bold = True
paragraph.Format.Alignment = 1  # 1=居中

# 表格操作
table = doc.Tables.Add(doc.Range(0,0), 3, 4)  # 3行4列
table.Cell(1,1).Range.Text = "单元格1"

# 保存
doc.SaveAs(r'C:\test\demo.docx')
doc.Close()
word.Quit()

2. 高级 Word 功能

# 样式应用
styles = doc.Styles
new_style = styles.Add("MyStyle", 1)  # 1=段落样式
new_style.Font.Name = "宋体"
new_style.Font.Size = 14

# 页眉页脚
section = doc.Sections(1)
header = section.Footers(win32.constants.wdHeaderFooterPrimary)
header.Range.Text = "公司机密"

# 邮件合并
doc.MailMerge.MainDocumentType = 0  # 0=普通文档
doc.MailMerge.OpenDataSource(Name:=r"C:\data\contacts.xlsx")

# 批量替换
word.Selection.Find.Execute("旧文本", False, False, False, False, False, True, 1, True, "新文本", 2)

PowerPoint 自动化

ppt = win32.Dispatch('PowerPoint.Application')
ppt.Visible = True

# 新建演示文稿
pres = ppt.Presentations.Add()

# 添加幻灯片
slide1 = pres.Slides.Add(1, 1)  # 1=标题幻灯片版式
slide1.Shapes(1).TextFrame.TextRange.Text = "主标题"
slide1.Shapes(2).TextFrame.TextRange.Text = "副标题"

# 添加内容幻灯片
slide2 = pres.Slides.Add(2, 2)  # 2=标题和内容版式
slide2.Shapes(1).TextFrame.TextRange.Text = "项目列表"
slide2.Shapes(2).TextFrame.TextRange.Text = "- 第一项\n- 第二项"

# 添加图表
slide3 = pres.Slides.Add(3, 5)  # 5=标题和图表版式
chart = slide3.Shapes(2).Chart
chart.ChartData.Workbook.Worksheets(1).Range("A1:B3").Value = [["产品", "销量"], ["A", 120], ["B", 150]]

# 保存
pres.SaveAs(r'C:\test\demo.pptx')
pres.Close()
ppt.Quit()

Outlook 自动化

1. 邮件发送

outlook = win32.Dispatch('Outlook.Application')
mail = outlook.CreateItem(0)  # 0=邮件项

mail.Subject = 'Python自动化邮件'
mail.Body = '这是一封通过Python自动发送的邮件'
mail.To = 'recipient@example.com'

# 添加附件
attachment = r'C:\test\report.xlsx'
mail.Attachments.Add(attachment)

# 发送
mail.Send()

# 或者显示邮件窗口人工发送
# mail.Display(True)

2. 邮件接收处理

outlook = win32.Dispatch('Outlook.Application')
namespace = outlook.GetNamespace("MAPI")
inbox = namespace.GetDefaultFolder(6)  # 6=收件箱

messages = inbox.Items
for message in messages:
    if message.UnRead:  # 未读邮件
        print(f"主题: {message.Subject}")
        print(f"发件人: {message.SenderName}")
        print(f"正文: {message.Body[:100]}...")
        
        # 标记为已读
        message.UnRead = False
        message.Save()

实用技巧与问题解决

1. 错误处理

try:
    excel = win32.Dispatch('Excel.Application')
    # 其他操作...
except Exception as e:
    print(f"Office自动化错误: {str(e)}")
finally:
    # 确保释放资源
    if 'excel' in locals():
        excel.Quit()

2. 进程清理

import os

def kill_process(process_name):
    os.system(f'taskkill /f /im {process_name}')

# 强制结束Excel进程
kill_process('EXCEL.EXE')

3. 提高性能

# 禁用屏幕刷新和警告提示
excel.ScreenUpdating = False
excel.DisplayAlerts = False

# 执行批量操作...

# 操作完成后恢复
excel.ScreenUpdating = True
excel.DisplayAlerts = True

4. 常见问题解决

权限问题

  • 以管理员身份运行Python脚本
  • 检查防病毒软件设置

版本兼容性

# 指定特定版本
excel = win32.Dispatch('Excel.Application.16') # Office 2016

中文路径处理

path = r'C:\测试\文档.xlsx'.encode('utf-8').decode('latin1') 
wb = excel.Workbooks.Open(path)

实际应用案例

1. 批量生成Word报告

def generate_reports(template_path, output_dir, data_list):
    word = win32.Dispatch('Word.Application')
    
    for data in data_list:
        doc = word.Documents.Open(template_path)
        
        # 替换模板标记
        for field, value in data.items():
            word.Selection.Find.Execute(field, False, False, False, False, False, True, 1, True, str(value), 2)
        
        # 保存为单独文件
        output_path = f"{output_dir}/report_{data['id']}.docx"
        doc.SaveAs(output_path)
        doc.Close()
    
    word.Quit()

2. Excel数据汇总仪表板

def create_dashboard(data_files, output_file):
    excel = win32.Dispatch('Excel.Application')
    wb = excel.Workbooks.Add()
    
    # 汇总数据
    for i, file in enumerate(data_files, 1):
        ws = wb.Worksheets.Add()
        ws.Name = f"Source_{i}"
        
        # 从CSV导入数据
        ws.QueryTables.Add(
            Connection=f"TEXT;{file}",
            Destination=ws.Range("A1")
        ).Refresh()
    
    # 创建汇总表
    summary_ws = wb.Worksheets.Add()
    summary_ws.Name = "Summary"
    
    # 添加数据透视表
    pivot_cache = wb.PivotCaches().Create(1, wb.Sheets("Source_1").UsedRange)
    pivot_table = pivot_cache.CreatePivotTable(summary_ws.Range("A3"), "DataSummary")
    
    # 配置透视表字段
    pivot_table.PivotFields("Category").Orientation = 1  # 行标签
    pivot_table.PivotFields("Value").Orientation = 4    # 数值
    
    wb.SaveAs(output_file)
    wb.Close()
    excel.Quit()

pywin32 提供了最全面的 Office 自动化能力,适合需要精细控制 Office 应用场景。使用时需注意资源释放和错误处理,确保自动化流程的稳定性。

到此这篇关于pywin32 实现 Windows Office自动化的示例代码的文章就介绍到这了,更多相关pywin32实现Office自动化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pytorch中如何使用DataLoader对数据集进行批处理的方法

    pytorch中如何使用DataLoader对数据集进行批处理的方法

    这篇文章主要介绍了pytorch中如何使用DataLoader对数据集进行批处理的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Python中pow()和math.pow()函数用法示例

    Python中pow()和math.pow()函数用法示例

    这篇文章主要介绍了Python中pow()和math.pow()函数用法,结合具体实例形式分析了Python使用pow()和math.pow()函数进行幂运算的相关操作技巧,需要的朋友可以参考下
    2018-02-02
  • Tensorflow的可视化工具Tensorboard的初步使用详解

    Tensorflow的可视化工具Tensorboard的初步使用详解

    这篇文章主要介绍了Tensorflow的可视化工具Tensorboard的初步使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • PyTorch 如何设置随机数种子使结果可复现

    PyTorch 如何设置随机数种子使结果可复现

    这篇文章主要介绍了PyTorch 设置随机数种子使结果可复现操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • numpy.random模块用法总结

    numpy.random模块用法总结

    这篇文章主要介绍了numpy.random模块用法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Python编程使用DRF实现一次性验证码OTP

    Python编程使用DRF实现一次性验证码OTP

    今天讲一下如何用 Django REST framework[1](DRF) 来实现 OTP,阅读本文需要一定的 DRF 的基础知识,有需要的朋友可以借鉴参考下
    2021-09-09
  • PyTorch使用Torchdyn实现连续时间神经网络的代码示例

    PyTorch使用Torchdyn实现连续时间神经网络的代码示例

    神经常微分方程(Neural ODEs)是深度学习领域的创新性模型架构,它将神经网络的离散变换扩展为连续时间动力系统,本文将基于Torchdyn(一个专门用于连续深度学习和平衡模型的PyTorch扩展库)介绍Neural ODE的实现与训练方法,需要的朋友可以参考下
    2025-02-02
  • Python离线安装各种库及pip的方法

    Python离线安装各种库及pip的方法

    这篇文章主要介绍了Python离线安装各种库及pip的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 从Pytorch模型pth文件中读取参数成numpy矩阵的操作

    从Pytorch模型pth文件中读取参数成numpy矩阵的操作

    这篇文章主要介绍了从Pytorch模型pth文件中读取参数成numpy矩阵的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • python selenium操作cookie的实现

    python selenium操作cookie的实现

    这篇文章主要介绍了python selenium操作cookie的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03

最新评论