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


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

    一、Hello,world!

    使用win32com需要安装pypiwin32

    pip install pypiwin32  
    
    • 1

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

    1、如何新建文档

    from win32com.client import Dispatch
    
    app =Dispatch('Word.Application')
    # 新建word文档
    doc = app.Documents.Add()
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    2、如何显示Word

    app.Visible = 1  
    
    • 1

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

    3、如何输入

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

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

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

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

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

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

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

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

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

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

    s()  
    
    • 1

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


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

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

    1、Application对象:Word应用。

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

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

    2、Document对象:文档。

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

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

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

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

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

    • 如何获得
    s = app.Selection  
    
    • 1

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

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

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

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

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

    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)  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    所有能获得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()  
    
    • 1
    • 2
    • 3

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

    • 如何使用

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

    5、Font对象:字体。

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

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

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

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

    6、ParagraphFormat对象:段落格式。

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

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

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

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

    7、PageSetup对象:页面设置。

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

    • 如何获得
    ps = doc.PageSetup  
    # 或  
    ps = s.PageSetup  
    # 或  
    ps = r.PageSetup  
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

    8、Styles对象:样式集。

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

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

    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文件放在桌面方便手动修改  
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    四、实例:格式化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   
    # 页眉无底边框横线  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87

    关于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入门到进阶资料 & 实战源码 & 兼职接单方法 安全链接免费领取

  • 相关阅读:
    web网页大作业——基于HTML+CSS+JavaScript制作摄影之家网站
    div css网页html成品学生作业包含10个html页面——动漫主题海贼王
    HTTPS请求阶段图解分析
    如何搭建一款BI系统
    极智AI | 讲解 TensoRT Activation 算子
    react151618刷新几次的问题
    Mysql第二篇---InnoDB数据存储结构
    [蓝桥杯 2021 省 AB2] 负载均衡
    【C# Programming】类、构造器、静态成员
    Nifi02 部署与入门
  • 原文地址:https://blog.csdn.net/Python84310366/article/details/133576469