用Python操作Word文档,看这一篇就对了!

news2024/9/21 0:43:02

本文主要讲解Python中操作word的思路。

一、Hello,world!

使用win32com需要安装pypiwin32

pip install pypiwin32  

推荐使用python的IDLE,交互方便

1、如何新建文档

from win32com.client import Dispatch

app =Dispatch('Word.Application')
# 新建word文档
doc = app.Documents.Add()

按F5运行,发现什么效果都没有, 这是因为Word被隐藏了。

2、如何显示Word

app.Visible = 1  

运行后,熟悉的Word界面出现。现在来输入文字。

3、如何输入

我们在Word中输入文字时,一般会先使用鼠标点击需要输入文字的位置,这个过程是获得了光标焦点。

当我们需要替换某些文字时,首先会选中某些文字,然后再输入、被选择的文字呈现出灰色的背景,表示被选中了。

光标焦点和选择范围在Word中,都是Selection。什么都没选择的光标焦点,和选择了整片文章的选择范围,代表了Selection的最小和最大范围。

这也是为什么整个Word中只能有一个Selection的原因。因为光标或者选择范围就只能有一个。

# 运行下句代码后,s获得新建文档的光标焦点,也就是图中的回车符前
s = app.Selection、
# 用“Hello, World!“替换s代表的范围的文本
s.Text = 'Hello, world!'

此时,s的范围为’Hello, world!'这句话的选择区域。

能如此方便的调用Word,得益于其底层的COM(组件对象模型)可以被任意语言调用。

Selection是Word对象模型中的类,此处的s是它的对象(实例)。

4、如何查看选择区域是什么

s.Text可以查看或者设置s选择区域的文本。Word对象模型中很多对象都有默认属性,Text就是Selection的默认属性,类似python的__str__方法。运行s()调用s的默认属性,此处等于于运行了s.Text

s()  

控制台显示,s的范围为’Hello, world!'这句话的选择区域。


二、对Word对象模型的简单理解

Word中最重要的类(对象)有以下几个。

1、Application对象:Word应用。

Application包含了菜单栏、工具栏、命令以及所有文档等。

# 如何获得  
app = win32com.client.Dispatch('Word.Application')  

2、Document对象:文档。

可以有多个Document,就像Word可以打开多个文档。

使用下列代码新建文档或者打开文档

# 如何获得  
# 新建文档  
doc = app.Documents.Add()  
# 打开已有文档  
doc = app.Documents.Open('你的Word文件路径')  

3、Selection对象:选区:代表当前窗口的选区。

它可以是文档中的选择(高亮)区域,也可以是插入点(如果没有什么被选中)。同一时间只能激活一个Selection。

  • 如何获得
s = app.Selection  

在Word中,按下Alt+F11打开宏编辑器

然后按下F2打开对象浏览器

输入selection并回车,发现成员一列中完全匹配Selection的只有4个类,这表示只有这些类的Selection属性可以返回Selection对象(如图)。

Application我们前面介绍过,其它的类可以用同样的方法查询如何获得。

  • 如何使用Selection输入
# 替换当前选择  
s.Text = 'Hello, world!'  
# 输入  
s.TypeText('Hello, world!')  
# 把当前选择复制到剪贴板  
s.Copy()  
# 粘贴剪贴板中的内容  
s.Paste()  

Text和TypeText的不同在于完成后的选区:

Text:输入的文本(前例中选区为’Hello, world!');

TypeText:文本后的插入点(前例中选区为!后的插入点)。

  • 如何变更Selection
# 使用Start,End指定字符范围  
s.Start = 0  
s.End = n  
# s从第0个字符(第1个字符前的插入点)到第n个字符。  
# 汉字是每字为1字符  
  
# 相当于按下Delete键  
s.Delete()   
# 相当于按下Ctrl+A  
s.WholeStory()   
# 向左移动  
s.MoveLeft()  
# 向右移动2个字符,第1个参数是移动单位WdUnits,见下图  
s.MoveRight(1, 2)  

所有能获得Selection的类

4、Range对象:连续区域。

Range表示一个连续区域。Range由Start和End位置定义,用来区分文档的不同部分。Range是独立于Selection的。不管Selection是否改变,都可以定义和操作Range。文档中可以定义多个Range。这个连续区域同样可以小到一个插入点,大到整个文档。Selection有Range属性,而Range没有Selection属性。

当使用Range(Start, End)方法来指定文档的特定范围时。文档的第一个字符位置为0,最后一个字符的位置和文档的字符总数相等。不提供参数时代表选择所有范围。

  • 如何获得
r = doc.Range()  
# 或  
r = s.Range()  

Word中有很多对象的Range属性都能返回Range对象,请在Word-宏编辑器-对象浏览器中自己查询。

  • 如何使用

因为本文仅使用Selection就可以达到效果,Range的很多属性和方法和Selection是类似的。

5、Font对象:字体。

包含对象的字体属性(字体名称、字号、颜色等)。

  • 如何获得
font = s.Font  
# 或  
font = r.Font  

同样,其余获得方法可在Word-宏编辑器-对象浏览器中查询。

  • 如何使用
# 字体设置为仿宋,电脑上必须安装有该字体  
font.Name = '仿宋'  
# 字号设置为三号  
font.Size = 16  

6、ParagraphFormat对象:段落格式。

用来设置段落格式,包括对齐、缩进、行距、边框底纹等。

  • 如何获得
pf = s.ParagraphFormat  
# 或  
pf = r.ParagraphFormat  

同样,其余获得方法可在Word-宏编辑器-对象浏览器中查询。

  • 如何使用
# 左、中、右 对齐分别为0, 1, 2,其他对齐方式见.NET 文档中的ParagraphFormat  
pf.Alignment = 0  
# 单倍、1.5倍、双倍行距分别为0, 1, 2,其他见ParagraphFormat文档  
pf.LineSpacingRule = 0  
# 指定段落的左缩进值为21磅。  
pf.LeftIndent = 21  

7、PageSetup对象:页面设置。

代表所有的页面设置属性,包括左边距,底边距,纸张大小等等。

  • 如何获得
ps = doc.PageSetup  
# 或  
ps = s.PageSetup  
# 或  
ps = r.PageSetup  

同样,其余获得方法可在Word-宏编辑器-对象浏览器中查询。

  • 如何使用
# 上边距79磅   
ps.TopMargin = 79  
# 页面大小,A3、A4分别为6,7  
ps.PageSize = 7  

8、Styles对象:样式集。

Styles包含指定文档中内置和用户定义的所有样式,它返回一个样式集。其中的每个样式的属性包括字体、 字形、 段落间距等。如常见的正文、页眉、标题1样式。

  • 如何获得
# 只能通过文档获得  
styles = doc.Styles  
  • 如何使用
# 返回正文样式  
normal = styles(-1)  
  
# 修改正文样式的字体字号  
normal.Font.Name = '仿宋'  
normal.Font.Size = 16  

Styles的返回参数,标题1、标题2、标题3分别为-2、-3、-4,页眉为-32,标题为-63,其他见Styles文档

三、解决问题思路

因为有很多功能,在文档中难以直接找到,需要使用如下方法。

1、把想实现的功能,使用word的录制宏,在宏编辑器里查看VBA代码,从而了解大概使用什么方法。

2、使用在线的 .NET API,从而了解详细的语法

3、如果不知道从哪获得实现该功能的对象,则可以使用word宏编辑器的对象浏览器(F2键),具体见前文Selection部分

4、使用Python的IDLE进行实时交互

app = win32com.client.Dispatch('word.application')  
app.Visible='True'   
# 让word程序可见,这样在交互命令行做的修改就可以实时显示  
doc = app.Documents.Open('你的桌面路径/test.docx')   
# word文件放在桌面方便手动修改  

然后输入自己想尝试的对象属性或方法。

四、实例:格式化word文件为最新的公文国家标准

只进行两个部分的设置,一是页面设置、二是页码设置

from win32com.client import Dispatch #需要安装的是pypiwin32模块  
  
  
app=Dispatch('Word.Application')  
doc = app.Documents.Open('你的word文档路径')  
  
# 页面设置  
cm_to_points = 28.35 # 1厘米为28.35磅  
# 国家公文格式标准要求是上边距版心3.7cm  
# 但是如果简单的把上边距设置为3.7cm  
# 则因为文本的第一行本身有行距  
# 会导致实际版心离上边缘较远,上下边距设置为3.3cm  
# 是经过实验的,可以看看公文标准的图示  
# 版心指的是文字与边缘距离  
doc.PageSetup.TopMargin = 3.3*cm_to_points    
# 上边距3.3厘米  
doc.PageSetup.BottomMargin = 3.3*cm_to_points    
# 下边距3.3厘米  
doc.PageSetup.LeftMargin = 2.8*cm_to_points    
# 左边距2.8厘米  
doc.PageSetup.RightMargin = 2.6*cm_to_points    
# 右边距2.6厘米  
  
# 设置正常样式的字体  
# 是为了后面指定行和字符网格时  
# 按照这个字体标准进行  
doc.Styles(-1).Font.Name = '仿宋'   
# word中的“正常”样式字体为仿宋  
doc.Styles(-1).Font.NameFarEast = '仿宋'   
# word中的“正常”样式字体为仿宋  
doc.Styles(-1).Font.NameAscii = '仿宋'  
# word中的“正常”样式字体为仿宋  
doc.Styles(-1).Font.NameOther = '仿宋'   
# word中的“正常”样式字体为仿宋  
doc.Styles(-1).Font.Size = 16   
# word中的“正常”样式字号为三号  
  
doc.PageSetup.LayoutMode = 1   
# 指定行和字符网格  
doc.PageSetup.CharsLine = 28   
# 每行28个字  
doc.PageSetup.LinesPage = 22   
# 每页22行,会自动设置行间距  
  
# 页码设置  
doc.PageSetup.FooterDistance = 2.8*cm_to_points    
# 页码距下边缘2.8厘米  
doc.PageSetup.OddAndEvenPagesHeaderFooter = 0   
# 首页页码相同  
doc.PageSetup.OddAndEvenPagesHeaderFooter = 0   
# 页脚奇偶页相同  
w = doc.windows(1)    
# 获得文档的第一个窗口  
w.view.seekview = 4   
# 获得页眉页脚视图  
s = w.selection    
# 获取窗口的选择对象  
s.headerfooter.pagenumbers.startingnumber = startingnumber    
# 设置起始页码  
s.headerfooter.pagenumbers.NumberStyle = 0    
# 设置页码样式为单纯的阿拉伯数字  
s.WholeStory()   
# 扩选到整个部分(会选中整个页眉页脚)  
s.Delete()   
#按下删除键,这两句是为了清除原来的页码  
s.headerfooter.pagenumbers.Add(4)    
# 添加页面外侧页码  
s.MoveLeft(1, 2)    
# 移动到页码左边,移动了两个字符距离  
s.TypeText('— ')    
# 给页码左边加上一字线,注意不是减号  
s.MoveRight()   
#移动到页码末尾,移动了一个字符距离  
# 默认参数是1(字符)  
s.TypeText(' —')   
s.WholeStory()   
# 扩选到整个页眉页脚部分,此处是必要的  
# 否则s只是在输入一字线后的一个光标,没有选择区域  
s.Font.Name = '宋体'  
s.Font.Size = 14   
#页码字号为四号  
s.paragraphformat.rightindent = 21   
#页码向左缩进1字符(21磅)  
s.paragraphformat.leftindent = 21   
# 页码向右缩进1字符(21磅)  
doc.Styles('页眉').ParagraphFormat.Borders(-3).LineStyle = 0   
# 页眉无底边框横线  

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

点击免费领取《CSDN大礼包》:Python入门到进阶资料 & 实战源码 & 兼职接单方法 安全链接免费领取

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

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

相关文章

大模型部署手记(4)MOSS+Jetson AGX Orin

1.简介 组织机构:复旦大学 代码仓:GitHub - OpenLMLab/MOSS: An open-source tool-augmented conversational language model from Fudan University 模型:fnlp/moss-moon-003-sft-int4 下载:https://huggingface.co/fnlp/mos…

【C语言】八大排序算法

文章目录 一、冒泡排序1、定义2、思想及图解3、代码 二、快速排序1、hoare版本2、挖坑法3、前后指针法4、非递归快排5、快速排序优化1)三数取中选key值2)小区间优化 三、直接插入排序1、定义2、代码 四、希尔排序1、定义2、图解3、代码 五、选择排序1、排…

Solidity 合约漏洞,价值 38BNB 漏洞分析

Solidity 合约漏洞,价值 38BNB 漏洞分析 1. 漏洞简介 https://twitter.com/NumenAlert/status/1626447469361102850 https://twitter.com/bbbb/status/1626392605264351235 2. 相关地址或交易 攻击交易: https://bscscan.com/tx/0x146586f05a451313…

(c语言进阶)数据存储——整形存储

1.Release程序运行时会对Debug程序进行优化 例如将变量创建在数组之后,避免了数组越界引用时导致死循环的可能。 2.整形变量所占空间的大小 3.构造类型 数组的类型为去掉数组名之后的剩余部分 4.指针类型 5.空类型 6.数值的不同表现形式 7.数据在内存中的两种存…

03.requests入门

1、requests概述 ​ 前面的课程中我们了解了requests模块是一个网络请求模块,可以帮助我们模拟成客户端去请求服 务器的数据。我们今天就是主要针对这个模块进行学习。 ​ 我们可以在浏览器中抓取到这些请求与响应的内容,那么我们可以“伪造”请求吗?也就是不再通过 浏览器…

python+pygame+opencv+gpt实现虚拟数字人直播(一)

AI技术突飞猛进,不断的改变着人们的工作和生活。数字人直播作为新兴形式,必将成为未来趋势,具有巨大的、广阔的、惊人的市场前景。它将不断融合创新技术和跨界合作,提供更具个性化和多样化的互动体验,成为未来的一种趋…

大模型部署手记(2)baichuan2+Windows GPU

1.简介 组织机构:百川智能(前搜狗CEO王小川创立) 代码仓:GitHub - baichuan-inc/Baichuan2: A series of large language models developed by Baichuan Intelligent Technology 模型:baichuan-inc/Baichuan2-7B-Ch…

二十九、高级IO与多路转接之epollreactor(收官!)

文章目录 一、Poll(一)定义(二)实现原理(三)优点(四)缺点 二、I/O多路转接之epoll(一)从网卡接收数据说起(二)如何知道接收了数据&…

【C++】vector相关OJ

文章目录 1. 只出现一次的数字2. 杨辉三角3. 电话号码字母组合 ヾ(๑╹◡╹)&#xff89;" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)&#xff89;" 1. 只出现一次的数字 力扣链接 代码展示&#xff1a; class Solution { public:int singleNumber(vector<i…

留学生用ChatGPT改论文被教授痛骂

最近&#xff0c;随着AI的突然出世&#xff01;瞬间在澳洲及各国留学圈掀起大浪潮&#xff01;然而一则帖子也在网上火了&#xff0c;值得留学生们看看。 “用ChatGPT改论文被教授痛骂...” 这个帖子表示&#xff0c;Chat GPT真是堪称Essay的第一生产力&#xff0c;但是Chat …

Septentrio接收机二进制的BDS b2b改正数解码

Galileo的HAS和BDS B2b改正数为实时PPP提供了可能&#xff0c;要实现实时PPP解算&#xff0c;必须对对应的数据进行解码。由于没有做过解码的工作&#xff0c;现结合qzsl6tool代码对Septentrio的解码代码进行学习。 1. 二进制枕头的识别和解码 定义一个读取数据的类&#xff…

ASUS华硕天选4笔记本FA507NU7735H_4050原装出厂Win11系统

下载链接&#xff1a;https://pan.baidu.com/s/1puxQOxk4Rbno1DqxhkvzXQ?pwdhkzz 系统自带网卡、显卡、声卡等所有驱动、出厂主题壁纸、Office办公软件、MyASUS华硕电脑管家、奥创控制中心等预装程序

Java类型转换和类型提升

目录 一、类型转换 1.1 自动类型转换&#xff08;隐式&#xff09; 1.1.1 int 与 long 之间 1.1.2 float 与 double 之间 1.1.3 int 与 byte 之间 1.2 强制类型转换&#xff08;显示&#xff09; 1.2.1 int 与 long 之间 1.2.2 float 与 double 之间 1.2.3 int 与 d…

Android12之H264、H265、H266视频编码标准总结(四十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

Redis高可用之哨兵模式、集群

文章目录 一、Redis哨兵模式1.1 简介1.2 哨兵模式的作用1.3 哨兵结构1.4 故障转移机制&#xff08;重要&#xff09;1.5 主节点选举机制 二、部署Redis哨兵模式Step1 修改 Redis 哨兵模式的配置文件&#xff08;所有节点操作&#xff09;Step2 实现基于VIP&#xff08;虚拟IP&a…

电脑dll丢失应该怎么解决,dll文件丢失怎么恢复方法分享

DLL&#xff08;Dynamic Link Library&#xff0c;动态链接库&#xff09;是一种可执行文件&#xff0c;它包含了在程序运行时需要调用的代码和资源。DLL 文件的主要作用是实现代码和资源的共享&#xff0c;这样在多个程序之间就可以避免重复的代码和资源&#xff0c;从而节省系…

Endnote 20 修改参考文献(References)的期刊全称为缩写

一、准备&#xff08;下载&#xff09;所需要的期刊缩写列表 &#xff08;Term Lists&#xff09; 我已经下载并上传了一份Trem Lists 链接: 在不列颠哥伦比亚大学图书馆网站导出所有期刊名和缩写&#xff0c;大概1W的期刊名字&#xff0c;期刊名字和缩写截至2021.12.03 哥伦…

QT4.8.7安装详细教程

QT4.8.7安装详细教程&#xff08;MinGW 4.8.2和QTCreator4.2.0&#xff09; 1.下载及安装2.配置环境 此文是在下方链接博文的基础上&#xff0c;按自己的理解整理的https://blog.csdn.net/xiaowanzi199009/article/details/104119265 1.下载及安装 这三个文件&#xff0c;顺序是…

135.【JUC并发编程_01】

JUC 并发编程 (一)、基本概述1.概述 (二)、进程与线程1.进程与线程(1).进程_介绍(2).线程_介绍(3).进程与线程的区别 2.并行和并发(1).并发_介绍(2).并行_介绍(3).并行和并发的区别 3.应用(1).异步调用_较少等待时间(2).多线程_提高效率 (三)、Java 线程1.创建线程和运行线程(1…

C++ - 布隆过滤器

前言 之前介绍了 位图&#xff0c;位图在判断某一个 数是否存在&#xff0c;或者在计算某个数是否出现 一次 或者 两次这些问题之上有着非常高效的实现复杂度&#xff0c;它的时间复杂度 可以达到 O&#xff08;1&#xff09;&#xff0c;因为都是逻辑判断和 &#xff0c;常数…