详细分析Python中的win32com(附Demo)

目录

  • 前言
  • 1. 基本知识
  • 2. Excel
  • 3. Word

前言

对于自动化RPA比较火热,相应的库也比较多,此文分析win32com这个库,用于操作office

1. 基本知识

Win32com 是一个 Python 模块,是 pywin32 扩展的一部分,允许 Python 代码与 Windows COM(Component Object Model)对象进行交互

COM 是 Windows 平台上用于组件软件模型的技术,可以让不同的应用程序通过 COM 对象进行通信和操作

基本的API如下:

  1. Dispatch 函数用于创建一个 COM 对象的实例
    通过对象的 ProgID 来初始化 COM 对象
import win32com.client
excel = win32com.client.Dispatch("Excel.Application")
  1. GetActiveObject 函数用于连接到已经运行的 COM 对象
    通过对象的 ProgID 来连接到现有的 COM 对象实例
word = win32com.client.GetActiveObject("Word.Application")
  1. DispatchEx 类似于 Dispatch,但允许在不同的安全上下文中创建 COM 对象
excel = win32com.client.DispatchEx("Excel.Application")
  1. EnsureDispatch 函数与 Dispatch 类似,但如果无法创建对象,则会抛出更友好的异常
excel = win32com.client.gencache.EnsureDispatch("Excel.Application")
  1. 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.clientdef 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,基本函数用法如下:

  1. 创建 Excel 应用程序实例excel = win32com.client.Dispatch("Excel.Application")
  2. 使 Excel 界面可见excel.Visible = True
  3. 创建一个新的工作簿workbook = excel.Workbooks.Add()
  4. 选择第一个工作表sheet = workbook.Worksheets(1)
  5. 向单元格中写入数据
  6. 保存工作簿workbook.SaveAs(r"C:\path\to\your\file.xlsx")
  7. 退出 Excel 应用程序excel.Quit()

3. Word

import win32com.clientdef 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,基本函数用法如下:

  1. 创建 Word 应用程序实例word = win32com.client.Dispatch("Word.Application")

  2. 使 Word 界面可见word.Visible = True

  3. 创建一个新的文档doc = word.Documents.Add()

  4. 向文档中写入文本

  5. 保存文档doc.SaveAs(r"C:\path\to\your\file.docx")

  6. 关闭文档doc.Close(False)

  7. 退出 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如下:

  1. 正文文字替换
import win32com.clientdef main():word = win32com.client.Dispatch("Word.Application")word.Visible = True# 打开一个现有的文档doc = word.Documents.Open(r"C:\path\to\your\file.docx")# 进行文字替换find = doc.Content.Findfind.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()
  1. 页眉页脚文字替换
import win32com.clientdef 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).Rangeheader_find = header_range.Findheader_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).Rangefooter_find = footer_range.Findfooter_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()
  1. 打印文档
import win32com.clientdef 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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言如何删除表中指定位置的结点?

一、问题 如何删除链表中指定位置的结点? 二、解答 删除链表中指定的结点,就像是排好队的⼩朋友⼿牵着⼿,将其中⼀个⼩朋友从队伍中分出来,只需将这个⼩朋友的双⼿从两边松开。 删除结点有两种情况: (1&am…

HTML静态网页成品作业(HTML+CSS)——我的家乡江永网页设计制作(1个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…

mysql -- WITH RECURSIVE 语法

引言 在 SQL 中,WITH RECURSIVE 是一个用于创建递归查询的语句。它允许你定义一个 Common Table Expression (CTE),该 CTE 可以引用自身的输出。递归 CTE 非常适合于查询具有层次结构或树状结构的数据,例如组织结构、文件系统或任何其他具有…

Pencils Protocol Season 2 收官在即,Season 3 携系列重磅权益来袭

此前Scroll生态LaunchPad &聚合收益平台Pencils Protocol(原Penpad),推出了首个资产即其生态代币PDD的Launch,Season 2活动主要是用户通过质押ETH代币、组件战队等方式,来获得Point奖励,并以该Point为依…

2024 Google I/O大会:全方位解读最新AI技术和产品

引言: 2024年的Google I/O大会如期举行,作为技术圈的年度盛事之一,谷歌展示了其在人工智能领域的最新进展。本次大会尤其引人注目,因为它紧随着OpenAI昨天发布GPT-4o的脚步。让我们详细解析Google此次公布的各项新技术和产品&…

svn如何远程访问?

svn(Subversion)是一种版本控制系统,广泛应用于软件开发领域。它能够追踪文件和目录的变化,记录每个版本的修改内容,并允许多人协同开发。svn的远程访问功能允许开发人员可以在不同的地点访问和管理代码,提…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-15.7讲 GPIO中断实验-编写按键中断驱动

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

typescript -元组类型

元组类型 元组表示有限元素构成的有序列表。元组类型是数组类型的子类型。元组是长度固定的数组,元组总每个元素都有具体的类型 元组的定义 [T0, T1, T2,...,Tn] const point: [number,number] [0, 0]只读元组 使用readonly修饰符或者Readonly工具类型 readon…

分布式websocket实时通讯的session共享问题

目录 1.需求 2.前置条件和要求 3.方案分析 3.1.方案1:session共享存储到redis数据库 3.2.方案2:采用mongo生命周期的AbstractMongoEventListener 3.3.方案3:引入redis等MQ组件,发送广播消息 3.4.方案4:采用chan…

AI4Science

AI4Science 文章目录 AI4ScienceMicroSoft AI4Science其它 微软研究院刘铁岩:AI for Science,追求人类智能最光辉的一面|MEET2023 (17min) https://www.bilibili.com/video/BV1bs4y1W7rW/AI Forum 2023 | AI4Science: …

html使用<el-table-column />时不能正常渲染出页面

一、bug开始了 <el-table-column prop"date" label"Date" width"180"/>当使用上述代码进行html渲染时&#xff0c;发现没有正常渲染出想象中的视图&#xff0c;乱七八糟地。 二、bug解决 在IDE中报了如下警告&#xff1a; Empty tag do…

EasyCVR智慧校园建设中的关键技术:视频汇聚智能管理系统应用

一、引言 随着信息技术的迅猛发展&#xff0c;智慧校园作为教育信息化建设的重要组成部分&#xff0c;对于提升校园安全、教学效率和管理水平具有重要意义。本文旨在介绍智慧校园视频管理系统的架构设计&#xff0c;为构建高效、智能的校园视频监控系统提供参考。 二、系统整…

机器学习之sklearn基础教程(第三篇:模型选择和评估)

机器学习之sklearn基础教程&#xff08;第三篇&#xff1a;模型选择和评估&#xff09; 1. 模型选择 在机器学习任务中&#xff0c;选择合适的模型是非常重要的。不同的模型适用于不同的问题类型和数据特征。 在模型选择过程中&#xff0c;有几个常用的方法和原则&#xff1a;…

Vitis HLS 学习笔记--资源绑定-使用URAM(1)

目录 1. 简介 2. 代码分析 2.1 存储器代码 2.2 Implementation报告 2.3 存储器类型指定 2.4 存储器初始化 3. 总结 1. 简介 在博文《Vitis HLS 学习笔记--资源绑定-使用URAM-CSDN博客》中&#xff0c;介绍了如何在Vitis HLS环境下设计一个简易的存储器模型。 通过以下…

gin自定义验证器+中文翻译

gin自定义验证器中文翻译 1、说明2、global.go3、validator.go4、eg&#xff1a;main.go5、调用接口测试 1、说明 gin官网自定义验证器给的例子相对比较简单&#xff0c;主要是语法级别&#xff0c;便于入门学习&#xff0c;并且没有给出翻译相关的处理&#xff0c;因此在这里记…

红黑树底层封装map、set C++

目录 一、框架思考 三个问题 问题1的解决 问题2的解决&#xff1a; 问题3的解决&#xff1a; 二、泛型编程 1、仿函数的泛型编程 2、迭代器的泛型编程 3、typename&#xff1a; 4、/--重载 三、原码 红黑树 map set 一、框架思考 map和set都是使用红黑树底层&…

超级好用的C++实用库之MD5信息摘要算法

&#x1f4a1; 需要该C实用库源码的大佬们&#xff0c;可搜索微信公众号“希望睿智”。添加关注后&#xff0c;输入消息“超级好用的C实用库”&#xff0c;即可获得源码的下载链接。 概述 MD5信息摘要算法是一种广泛使用的密码散列函数&#xff0c;由Ronald L. Rivest在1991年设…

【DevOps】Linux 与虚拟局域网 (VLAN) 详解

目录 一、什么是VLAN&#xff1f; 二、VLAN的工作原理 三、Linux中的VLAN支持 四、内核模块 五、用户空间工具 六、创建VLAN 七、配置VLAN 八、管理VLAN 九、VLAN的应用 1、 网络隔离 2、网络管理 3、网络扩展 十、VLAN的优点和限制 十一、结论 虚拟局域网&#…

vue响应式的本质

参考b站视频&#xff1a;vue响应式的本质【渡一教育】_哔哩哔哩_bilibili 一、响应式本质 是函数和数据的关联&#xff1b;在数据发生变化时&#xff0c;调用关联的函数。 那是不是所有函数和数据关联都是响应式呢&#xff1f;那显然不是 二、响应式条件 怎么样的函数和数…

ubuntu2024.04下配置jdk(安装java环境)

1、安装jdk sudo apt update sudo apt install default-jdk 2、查找安装路径&#xff0c;要将路径替换为自己查到的路径 $ sudo update-alternatives --config java 有 1 个候选项可用于替换 java (提供 /usr/bin/java)。选择 路径 …