首页 > Python资料 博客日记
详细分析Python中的win32com(附Demo)
2024-10-19 20:00:05Python资料围观44次
文章详细分析Python中的win32com(附Demo)分享给大家,欢迎收藏Python资料网,专注分享技术知识
前言
对于自动化RPA比较火热,相应的库也比较多,此文分析win32com这个库,用于操作office
1. 基本知识
Win32com 是一个 Python 模块,是 pywin32 扩展的一部分,允许 Python 代码与 Windows COM(Component Object Model)对象进行交互
COM 是 Windows 平台上用于组件软件模型的技术,可以让不同的应用程序通过 COM 对象进行通信和操作
基本的API如下:
- Dispatch 函数用于创建一个 COM 对象的实例
通过对象的 ProgID 来初始化 COM 对象
import win32com.client
excel = win32com.client.Dispatch("Excel.Application")
- GetActiveObject 函数用于连接到已经运行的 COM 对象
通过对象的 ProgID 来连接到现有的 COM 对象实例
word = win32com.client.GetActiveObject("Word.Application")
- DispatchEx 类似于 Dispatch,但允许在不同的安全上下文中创建 COM 对象
excel = win32com.client.DispatchEx("Excel.Application")
- EnsureDispatch 函数与 Dispatch 类似,但如果无法创建对象,则会抛出更友好的异常
excel = win32com.client.gencache.EnsureDispatch("Excel.Application")
- WithEvents 函数用于绑定事件处理程序到 COM 对象
class ExcelEvents:
def OnWorkbookOpen(self, wb):
print("Workbook opened:", wb.Name)
excel = win32com.client.DispatchWithEvents("Excel.Application", ExcelEvents)
2. Excel
基本的Demo如下:
展示了如何使用 win32com 控制 Excel 应用程序,创建一个新工作簿,并向单元格中写入数据
import win32com.client
def main():
# 创建 Excel 应用程序实例
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = True # 使 Excel 界面可见
# 创建一个新的工作簿
workbook = excel.Workbooks.Add()
sheet = workbook.Worksheets(1)
# 向单元格中写入数据
sheet.Cells(1, 1).Value = "Hello"
sheet.Cells(1, 2).Value = "World"
sheet.Cells(2, 1).Value = "Python"
sheet.Cells(2, 2).Value = "Win32com"
# 保存工作簿
workbook.SaveAs(r"d:\Users\lixiaosong\ceshi.xlsx")
# 关闭工作簿
workbook.Close(False) # False 表示不保存
# 退出 Excel 应用程序
excel.Quit()
if __name__ == "__main__":
main()
截图如下:
对于上述的Demo,基本函数用法如下:
- 创建 Excel 应用程序实例:
excel = win32com.client.Dispatch("Excel.Application")
- 使 Excel 界面可见:
excel.Visible = True
- 创建一个新的工作簿:
workbook = excel.Workbooks.Add()
- 选择第一个工作表:
sheet = workbook.Worksheets(1)
- 向单元格中写入数据
- 保存工作簿:
workbook.SaveAs(r"C:\path\to\your\file.xlsx")
- 退出 Excel 应用程序:
excel.Quit()
3. Word
import win32com.client
def main():
# 创建 Word 应用程序实例
word = win32com.client.Dispatch("Word.Application")
word.Visible = True # 使 Word 界面可见
# 创建一个新的文档
doc = word.Documents.Add()
# 向文档中写入文本
range_obj = doc.Range(0, 0)
range_obj.Text = "Hello World!\n"
range_obj.InsertAfter("This is a demo of win32com in Python.\n")
range_obj.InsertAfter("You can automate Word operations using Python scripts.\n")
# 保存文档
doc.SaveAs(r"d:\Users\lixiaosong\file.docx")
# 关闭文档
doc.Close(False) # False 表示不保存
# 退出 Word 应用程序
word.Quit()
if __name__ == "__main__":
main()
截图如下:
对于上述的Demo,基本函数用法如下:
-
创建 Word 应用程序实例:
word = win32com.client.Dispatch("Word.Application")
-
使 Word 界面可见:
word.Visible = True
-
创建一个新的文档:
doc = word.Documents.Add()
-
向文档中写入文本
-
保存文档:
doc.SaveAs(r"C:\path\to\your\file.docx")
-
关闭文档:
doc.Close(False)
-
退出 Word 应用程序:
word.Quit()
以上的Demo比较简易,如果想花里胡哨还可使用如下:
- 插入段落:
paragraph = doc.Paragraphs.Add()
paragraph.Range.Text = "This is a new paragraph."
- 设置文本格式:
range_obj.Font.Name = "Arial"
range_obj.Font.Size = 12
range_obj.Font.Bold = True
range_obj.Font.Italic = True
- 插入表格:
table = doc.Tables.Add(range_obj, 3, 3)
table.Cell(1, 1).Range.Text = "Row 1, Col 1"
table.Cell(1, 2).Range.Text = "Row 1, Col 2"
table.Cell(1, 3).Range.Text = "Row 1, Col 3"
- 正文文字替换:
find = doc.Content.Find
find.Text = "old text"
find.Replacement.Text = "new text"
find.Execute(Replace=2)
- 页眉页脚文字替换:
header_range = doc.Sections(1).Headers(win32com.client.constants.wdHeaderFooterPrimary).Range
header_find = header_range.Find
header_find.Text = "old header text"
header_find.Replacement.Text = "new header text"
header_find.Execute(Replace=2)
- 打印文档:
doc.PrintOut()
更多的Demo如下:
- 正文文字替换:
import win32com.client
def main():
word = win32com.client.Dispatch("Word.Application")
word.Visible = True
# 打开一个现有的文档
doc = word.Documents.Open(r"C:\path\to\your\file.docx")
# 进行文字替换
find = doc.Content.Find
find.Text = "old text"
find.Replacement.Text = "new text"
find.Execute(Replace=2) # 2 表示 wdReplaceAll
# 保存并关闭文档
doc.Save()
doc.Close(False)
word.Quit()
if __name__ == "__main__":
main()
- 页眉页脚文字替换:
import win32com.client
def main():
word = win32com.client.Dispatch("Word.Application")
word.Visible = True
# 打开一个现有的文档
doc = word.Documents.Open(r"C:\path\to\your\file.docx")
# 访问页眉
header_range = doc.Sections(1).Headers(win32com.client.constants.wdHeaderFooterPrimary).Range
header_find = header_range.Find
header_find.Text = "old header text"
header_find.Replacement.Text = "new header text"
header_find.Execute(Replace=2)
# 访问页脚
footer_range = doc.Sections(1).Footers(win32com.client.constants.wdHeaderFooterPrimary).Range
footer_find = footer_range.Find
footer_find.Text = "old footer text"
footer_find.Replacement.Text = "new footer text"
footer_find.Execute(Replace=2)
# 保存并关闭文档
doc.Save()
doc.Close(False)
word.Quit()
if __name__ == "__main__":
main()
- 打印文档:
import win32com.client
def main():
word = win32com.client.Dispatch("Word.Application")
word.Visible = True
# 打开一个现有的文档
doc = word.Documents.Open(r"C:\path\to\your\file.docx")
# 打印文档
doc.PrintOut()
# 关闭文档
doc.Close(False)
word.Quit()
if __name__ == "__main__":
main()
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj