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

news2025/3/10 5:42:58

目录

  • 前言
  • 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.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,基本函数用法如下:

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

  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.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()
  1. 页眉页脚文字替换
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()
  1. 打印文档
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()

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

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

相关文章

【讲解下PDM,PDM是什么?】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

ELF 1技术贴|如何在Ubuntu上配置Samba服务器

Samba是一个开源的软件套件,提供了一种实现SMB/CIFS协议的方式,可以无缝链接Linux与Windows系统,让开发者在局域网络框架下实现共享文件、打印资源等,确保了数据交流的高效与稳定。 相较于在Ubuntu环境下运用传统的Vim编辑器&…

AI图书推荐:ChatGPT 和Power BI驱动未来金融投资变革

《ChatGPT 和Power BI驱动未来金融变革》(The Future of Finance with ChatGPT and Power BI)由James Bryant和Aloke Mukherjee撰写,探讨了ChatGPT和Power BI在金融领域的应用。 主要特点: - 使用ChatGPT自动化Power BI&#xff…

【算法】网络图中的dfs

快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、单词搜索二、黄金矿工三、不同路径 |||四、图像渲染五、岛屿数量六、岛屿的最大面积七、被围绕的区域…

Oracle 自治数据库 Select AI 初体验

这几天有点时间,准备尝试下Oracle Select AI,虽然此功能2023年就已经发布了。 Oracle自治数据库已经集成好了Select AI,本文也是讲的这个。 配置 Select AI 需要以下步骤: 创建ADB申请Cohere/OpenAI免费账号设置ADB测试Select…

【微信小程序开发(从零到一)【婚礼邀请函】制作】——邀请函界面的制作(2)

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

开发属于自己的Spring Boot Starter-18

为什么要开发专用的Spring Boot Starter Spring在通常使用时,一般是通过pom.xml文件中引入相关的jar包,然后再通过application.yml文件配置初始化bean的配置,但随着项目越来越复杂或是项目组中的应用数量越来越多,可能会带来几个…

为什么买的蓝牙串口模块不能实现蓝牙键盘给手机文本框或记事本打字或控制手机?

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言1、原因2、蓝牙键盘制作流程 前言 送给大学毕业后找不到奋斗方向的你(每周不定时更新) 【…

线程池的一些问题

核心线程数1.最大线程5.队列5.存活时间10s 1.场景一 如果核心线程数.被一直占用得不到释放.新进来1个任务.会怎么样?答: 会在队列中中死等. 只要进来的任务.不超过队列的长度,就会一直挡在队列中死等 package com.lin;import java.util.concurrent.Executors; import java.u…

4.线性代数

深度学习作为一门前沿的、应用广泛的学科,对于数学基础的要求非常高。 线性代数 线性代数在深度学习中扮演着至关重要的角色。它不仅是描述和理解数据的基础工具,也是构建和训练神经网络的核心组件。例如,在深度学习中,我们经常…

ArcGI基本技巧-科研常用OLS, GWR, GTWR模型实现

ArcGI基本技巧-科研常用OLS, GWR, GTWR模型实现 OLS,GWR,GTWR回归模型均可以揭示解释变量对被解释变量的影响且可以进行预测。Ordinary Least Squares (OLS)是最小二乘法,Geographically Weighted Regression (GWR)是地理加权回归,Geographically and T…

Redis-Redis事务

Redis事务 Redis事务简介 Redis事务是一组命令的集合,一个事务中的所有命令都将被序列化,按照一次性、顺序性、排他 性的执行队列系列的命令。Redis单条命令保证原子性,但是事务不保证原子性,且没有回滚。事务中任意命令执行失败…

大模型对数据库运维的赋能:智能运维的新时代

引言随着人工智能技术的飞速发展,大模型作为AI领域的前沿技术,已经开始在数据库运维(DBA)领域展现出其独特的价值。大模型的引入,不仅提升了数据库运维的效率,还极大地改善了运维的质量和智能化水平。本文将深入分析大模型在数据库…

train_gpt2_fp32.cu - main

llm.c/test_gpt2_fp32.cu at master karpathy/llm.c (github.com) 源码 // ---------------------------------------------------------------------------- // main training loop int main(int argc, char *argv[]) {// read in the (optional) command line argumentsco…

【数据结构】排序(直接插入排序,希尔排序)

目录 一、排序的概念 二、常见的排序算法 三、插入排序 1.直接插入排序 1.直接插入排序实现 2.直接插入排序特性及复杂度 2.希尔排序 1.排序思路 2.希尔排序实现 3.希尔排序的特性及复杂度 一、排序的概念 排序:所谓排序,就是使一串记录&#x…

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

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

适用于 Mac 的 10 种最佳数据恢复工具优点、缺点

数据丢失很常见,并且可能由于许多不同的原因而发生。这种情况在我和我们团队的其他成员身上发生过很多次,即使我们格外小心我们的个人存储设备。 幸运的是,数据恢复软件在大多数情况下都可以工作。但是,由于数据丢失场景彼此之间…

在UBuntu上安装QT环境

一、UBuntu环境 二、官网下载QT https://download.qt.io/archive/qt/ 安装所需选择版本下载,可以现在windows下载在复制进去 三、安装QT 1、复制到ubuntu 2、打开终端,改变刚下载文件的权限 权限代号 r:读取权限,数字代号为 “…

【Pytorch】9.torch.nn.MaxPool2d

什么是MaxPool2d 是对二维矩阵进行池化层下采样的方法 MaxPool2d的用法 相较于卷积层,多出来的参数为ceil_mode 这个参数代表,如果所剩的部分不够卷积核的大小,要不要进行池化操作 具体代码为 import torch import torchvision from torch …

深度学习之卷积神经网络理论基础

深度学习之卷积神经网络理论基础 卷积层的操作(Convolutional layer) 在提出卷积层的概念之前首先引入图像识别的特点 图像识别的特点 特征具有局部性:老虎重要特征“王字”仅出现在头部区域特征可能出现在任何位置下采样图像&#xff0c…