介绍采用python_docx模块处理word文档的基本技巧,特别是图片如何提取和写入。

python_docx模块只能处理docx,不支持doc,如需使用,要进行转换。代码入下:

from win32com import client as wc
word = wc.Dispatch("Word.Application")
doc = word.Documents.Open(r"d:\123.doc".doc)
doc.SaveAs(r"d:\123.docx".docx, 12) 12为docx
doc.Close()
word.Quit()

python已有几个模块可处理word文档、excel表格、以及ppt演示文稿。首先,汇总列出各模块对不同版本文件的处理能力:

docx模块:可读取、写入.docx文档(不支持.doc文档!!!)

xlrd模块:可读取.xls、.xlsx表格

xlwt模块:可写入.xls表格(不可写入.xlsx文件!!!)

pptx模块:可读取、写入.ppt、.pptx(.ppt演示文稿,只能读取pptx模块自身输出的,对其他方式生成的不支持!!!)

首先介绍docx模块中如何描述一篇word文档。

word文档的结构描述不如excel表格那么直观。word文档整体上有几类对象组成:

(1)节Section:表示word文档中页面布局一样的部分内容。

(2)段落Paragraph:word文档的基本组成单元就是段落。文字、图形都位于段落之中。

(3)块Run:每个段落之中的内容可以具有不同的样式,这些具有相同样式的基本单元可称之为块。一个段落可由多个块组成(各块之间允许设置不同的样式,但也可保持相同的样式)。

(4)内联图形Inline_shape:以嵌入方式置入word文档中的图形称之为内联图形。除此之外,还有其他布局方式的图形,可在块中找到,但其并不在内联图形集合中。

(5)表格Table:嵌入word文档的表格。表格由行、列、单元格组成。单元格中的内容可以包含段落、图形、表格等。注意,表格不在段落之中。

(6)样式Style:用来确定word文档内置对象格式的各种样式,包括段落样式、表格样式、字符样式、列表样式(包括有序列表和无序列表)。

以上1~3项、6项是一个word文档必备的元素。

下面介绍docx模块具体如何操作一个word文档。

打开或新建文档:

doc = docx.Document('1.docx') #打开word文档1.docx,如果不指定文件路径,则新建文档

节操作:

新建的文档已包含一个节对象。节对象本质上是一个分节符(除第一节外),分节符本身构成一个独立段落,包括在doc.paragraphs中。

doc.sections #返回文档中节集合,其组成元素为节对象,可以通过索引获取

doc.add_section(start_type=2) #增加一个新节,start_type为分节符的类型

doc.sections[n] #返回索引为n的节对象。可以通过节对象的属性访问或设置节的格式,其主要属性包括:

  • 分节符类型:'start_type',0表示连续分节符,1表示节的结尾符号,2表示下一页分节符,3表示偶数页分节符,4表示奇数页分节符
  • 页面方向: 'orientation',1表示横向,0表示纵向
  • 页面尺寸:'page_height'(页高), 'page_width'(叶宽)。距离属性都可通过尺寸对象docx.shared.xx()进行设置(详见下文公用对象)
  • 边距:'bottom_margin'(底部页边距), 'footer_distance'(页脚到底部间距), 'gutter'(装订线到叶边距离), 'header_distance'(顶部页边距), 'left_margin'(左侧页边距), 'right_margin'(右侧页边距), 'top_margin'(顶部页边距)。距离属性都可通过尺寸对象docx.shared.xx()进行设置(详见下文公用对象)

段落操作:

doc.paragraphs #返回文档中段落集合,其组成元素为段落对象,可以通过索引获取

doc.paragraphs[n] #返回索引为n的段落对象

doc.add_paragraph(text='', style=None) #在文档末尾增加一个新的段落,text为段落文本,style为段落样式(如缺省为None,则继承文档默认段落样式)

doc.add_heading(text='', level=1) #在文档末尾增加标题段落。level表示标题级别

doc.add_page_break() #在文档末尾增加新段落,该段落仅包含分页符

doc.paragraphs[n].insert_paragraph_before(text=None, style=None) #在索引为n的段落前增加一个段落

doc.paragraphs[n].text #返回或设置段落的文本内容

doc.paragraphs[n].paragraph_format #返回索引为n的段落的段落格式。可以通过段落格式(而不是段落对象本身,与节对象不同)的属性访问或设置段落的格式,其主要属性包括:

  • 段落对齐方式:'alignment',0为左对齐,1为居中,2为右对齐,3为两端对齐,4为分散对齐,5为垂直居中对齐,7为垂直顶端对齐,8为垂直底端对齐,9为泰文对齐(5~9还有待确认)
  • 缩进:'first_line_indent'(首行缩进,如为负值则是悬挂缩进), 'left_indent'(段落左侧缩进), 'right_indent'(段落右侧缩进)。距离属性都可通过尺寸对象docx.shared.xx()进行设置(详见下文公用对象)
  • 间距:'line_spacing'(行距), 'line_spacing_rule'(行距预设值,0表示单倍行距,1表示1.5倍行距,2表示2倍行距,3表示最小行距,4表示固定行距,5表示多倍行距), 'space_after'(段后间距), 'space_before'(段前间距)。除行距预设值外,其他都是距离属性,都可通过尺寸对象docx.shared.xx()进行设置(详见下文公用对象)
  • 换行和分页:'keep_together'(段中不分页), 'keep_with_next'(与下段同页), 'page_break_before'(段前分页), 'widow_control'(孤行控制),均为逻辑值(True/False)
  • 制表位:'tab_stops',返回该段落采用的制表位集合。所谓制表位,就是在标尺上出现的标记,用于控制tab键的对齐方式。
  • doc.paragraphs[n].tab_stops.add_tab_stop(position, alignment=0, leader=0) #在position(离段落左边界的距离)位置添加一个制表位,alignment为制表位对齐方式(0为左对齐,1为居中,2为右对齐,3为小数点对齐,4为竖线对齐),leader为前导符(0为无,1为.....,2为---,3为___,4为……)
  • doc.paragraphs[n].runs[m].add_tab() #在块操作中,可增加制表符。也可直接在段落或块的text属性中写入'\t',也表示一个制表符

块操作:

doc.paragraphs[n].runs #返回段落n的块集合,其组成元素为块对象,可以通过索引获取

doc.paragraphs[n].add_run(text=None, style=None) #在段落末尾增加一个新的块

doc.paragraphs[n].runs[m].add_break(break_type=6) #在块末尾增加分隔符。break_type为分隔符类型(2为下一页分节符,3为连续分节符,4为偶数页分节符,5为奇数页分节符,6为换行符,7为分页符,8为分栏符,9、10、11都可认为是换行符。注意区别节对象的start_type属性,两者分节符的代码并不一样)。换行符即'\n',其也可通过.text属性设置

doc.paragraphs[n].runs[m].add_text(text) #在块末尾增加文字内容

doc.paragraphs[n].runs[m].text #返回或设置块的文本内容

doc.paragraphs[n].runs[m].element.drawing_lst #返回块中的图形列表,包括内联图形和非内联图形,相比doc.inline_shapes更完整!!!

doc.paragraphs[n].runs[m] #返回段落n的块对象m。可以通过其属性访问或设置块的格式(主要是文字样式),其主要属性包括:

  • 加粗: 'bold',True表示加粗
  • 斜体:'italic',True表示斜体
  • 下划线:'underline',一共可设置18种下划线样式(常用的0为无下划线,1为单下划线,3为双下划线,4为点下划线,6为加粗单下划线,11为波浪线)
  • 字体:'font',返回字体对象,通过字体对象的以下属性可以设置块文字字体样式:
  • name:字体名称
  • size:字体大小,可通过磅数docx.shared.Pt()进行设置(详见下文公用对象)
  • bold:True表示加粗
  • italic:True表示斜体
  • underline:下划线,同上可设置18种下划线样式

内联图形操作:

doc.inline_shapes #文档所有内联图形的集合,其元素为内联图形对象,可索引

doc.paragraphs[n].add_picture(image_path_or_stream, width=None, height=None) #在文档末尾增加内联图形,作为一个新的段落。image_path_or_stream为图片文件路径或文件对象。width(图片宽度)、height(图片高度)可通过尺寸对象docx.shared.xx()进行设置(详见下文公用对象),指定其中之一即可,另一将按比例缩放

doc.paragraphs[n].runs[m].add_picture(image_path_or_stream, width=None, height=None) #在块末尾增加内联图形。image_path_or_stream为图片文件路径或文件对象。width(图片宽度)、height(图片高度)可通过尺寸对象docx.shared.xx()进行设置(详见下文公用对象),指定其中之一即可,另一将按比例缩放

doc.inline_shapes[n] #索引为n的内联图形对象。通过其属性可访问或设置对应内联图形的格式,主要属性包括:

  • 图片尺寸:'height', 'width',可通过尺寸对象docx.shared.xx()进行设置(详见下文公用对象)
  • 图片类型:'type'(3表示图片,4表示链接图片,12表示图表,15表示smart-art图形)

表格操作:

doc.tables #文档中的表格对象集合,可索引

doc.tables[n].add_row() #在表格底部增加一行

doc.tables[n].add_column(width) #在表格右侧增加一列,列宽为width,可通过尺寸对象docx.shared.xx()进行设置(详见下文公用对象)

doc.tables[n].rows #返回表格行对象集合

doc.tables[n].columns #返回表格列对象集合

doc.tables[n].row_cells(rowx) #返回表格行索引为rowx的单元格对象集合

doc.tables[n].column_cells(colx) #返回表格列索引为colx的单元格对象集合

doc.tables[n].cell(rowx, colx) #返回表格行、列索引分别为rowx、colx的单元格对象。单元格具有属性:'add_paragraph', 'add_table', 'merge', 'paragraphs', 'tables', 'text', 'width'等

doc.tables[n] #索引为n的表格,通过其属性可访问或设置表格格式,主要属性包括:

  • 对齐方式:'alignment',缺省0表示左对齐,1表示居中,2表示右对齐。
  • 自动调整:'autofit',如为True,表示根据内容自动调整列宽。False表示固定列宽。如果表格宽度超过页面宽度,则无论True还是False,表格列宽都将自动调整
  • 表格方向:'table_direction',True表示从右向左排列,False(默认)表示从左向右排列

样式操作:

doc.styles #返回文档样式集合,其元素包括段落样式、表格样式、字符样式、列表样式,只可通过键访问(键为样式名称)(区别于文档其他对象集合通过索引访问)

doc.styles.add_style(name, style_type, builtin=False) #新增一个样式。name为样式名称,style_type为样式类型(1代表段落;2代表字符;3代表表格;4表示列表),builtin(bool)表示是否为內建样式

公用对象:

docx.shared.xx() #尺寸对象,可用于各类尺寸相关设置,包括多种单位制(厘米Cm、毫米Mm、英寸Inches、磅数Pt、Emu、缇Twips)

docx.enum.shape.WD_INLINE_SHAPE #表示内联图形类型的常量类

docx.enum.text.WD_ALIGN_PARAGRAPH #表示段落对齐方式的常量类

docx.enum.text.WD_PARAGRAPH_ALIGNMENT #同docx.enum.text.WD_ALIGN_PARAGRAPH

docx.enum.text.WD_BREAK #表示分隔符类型的常量类

docx.enum.text.WD_BREAK_TYPE #同docx.enum.text.WD_BREAK

docx.enum.text.WD_COLOR #表示颜色的常量类

docx.enum.text.WD_COLOR_INDEX #同docx.enum.text.WD_COLOR

docx.enum.text.WD_LINE_SPACING #表示行距的常量类

docx.enum.text.WD_TAB_ALIGNMENT #表示制表位对齐方式的常量类

docx.enum.text.WD_TAB_LEADER #表示制表位前导符的常量类

docx.enum.text.WD_UNDERLINE #表示下划线类型的常量类

python处理word、ppt、excel的更多相关文章

  1. Windows:Word,PPT,EXCEL com+组件配置

    本文所涉及到配置前提: 服务器必须安装Office套件(Word,PPT,Excel) 第一部分 Word Com+组件权限配置 1.cmd模式输入dcomcnfg 2.找到Microsoft Wor ...

  2. python读写word、excel、csv、json文件

    http://blog.csdn.net/pipisorry/article/details/50368044 python读写word文档 (include wps)将word文档转换成txt文档 ...

  3. java实现word,ppt,excel,jpg转pdf

    word,excel,jpeg 转 pdf 首先下载相关jar包:http://download.csdn.net/detail/xu281828044/6922499 import java.io. ...

  4. .net 实现Office文件预览 Word PPT Excel 2015-01-23 08:47 63人阅读 评论(0) 收藏

    先打个广告: .Net交流群:252713569 本人QQ :524808775 欢迎技术探讨, 近期公司要求上传的PPT和Word都需要可以在线预览.. 小弟我是从来没有接触过这一块的东西 感觉很棘 ...

  5. Java中Office(word/ppt/excel)转换成HTML实现

    运行条件:JDK + jacob.jar + jacob.dll 1) 把jacob.dll在 JAVA_HOME\bin\ 和 JAVA_HOME\jre\bin\ 以及C:\WINDOWS\sys ...

  6. word ppt excel文档转换成pdf

    1.把word文档转换成pdf (1).添加引用 using Microsoft.Office.Interop.Word; 添加引用 (2).转换方法 /// <summary> /// ...

  7. Python操作Word与Excel并打包

    安装模块 # Word操作库 pip install docx # Excel操作库 pip install openpyxl # 打包exe工具 pip install pyinstaller Wo ...

  8. libreoffice python 操作word及excel文档

    1.开始.关闭libreoffice服务: 开始之前同步字体文件时间,是因为创建soffice服务时,服务会检查所需加载的文件的时间,如果其认为时间不符,则其可能会重新加载,耗时较长,因此需事先统一时 ...

  9. 全套Office办公软件WORD/PPT/EXCEL视频教程 每日更新中

    详情见Processon分享链接:https://www.processon.com/view/link/5b3f40abe4b09a67415e2bfc

  10. office(Word、Excel、PPT等图标异常和桌面无新建解决方案)

    前言吐槽: 前不久因为安装了WPS,然后觉得不好用卸载WPS装回office就出现了一个很恶心的问题:word文档.excel文档.PPT这些办公软件图标异常,显示的是下面这样: 打开倒是可以正常用w ...

随机推荐

  1. http 协议( 简单了解 )

    HTTP 请求协议 超文本传输协议,是一种用于分布式写作式和媒体信息系统的应用层协议. HTTP是万维网的数据通信的基础. HTTP协议概述 HTTP是一个客户端终端 (用户) 和服务器端 ( 网端) ...

  2. php正方形图片转成成圆形图片-GD

    /** * 剪切图片为圆形 * @param $picture 图片数据流 比如file_get_contents(imageurl)返回的东东 * @return 图片数据流 */ private ...

  3. 多个module的verilog文件分割为多个文件

    python 分割含有多个module的verilog文件,按照module名来命名文件 import re # 读取 Verilog 文件 with open('test.v', 'r') as f ...

  4. django搭建简易blog

    目录 下载安装django 创建一个django项目 创建一个django应用 models.py urls.py views.py admin.py 配置应用到项目下 路由设置urls.py set ...

  5. flannel 关闭SNAT

    flannel 关闭SNAT 默认情况下,flannel 访问集群外网络是通过 SNAT 成宿主机 ip 方式,在一些金融客户环境中为了能实现防火墙规则,需要直接针对 POD ip 进行进行规则配置, ...

  6. replace 常用积累

    1.替换有,或者.为: obj.keyword.replace(/,|./g,';') 2.替换元素标签类似于<em>文字</em>这种 let name=item.name. ...

  7. SAP BW/4HANA学习笔记2

    2.Data Modeling BW/4HANA Data Modeling简介 Data Quality:数据质量问题: silos(桶仓):大量重复冗余的主数据,独立计算统计: 数据silos缺点 ...

  8. 微信带参数的小程序码生成并上传到七牛云(java)

    在大家看正式内容之前请耐心的听我把这段话说完:我冒昧的猜一下,你为了解决问题估计已经看了很多文章了,如果这边文章能给你带来帮助,不胜荣幸,如果有错误也请批评指正,共同进步,我之前在完成这个功能之前,从 ...

  9. LWC-001_Event

    文章来源: Events (lwc.dev) 1. 监控子组件的动作: Child.html <template> <button>Click</button> & ...

  10. web安全学习笔记(2022/8/26)

    网络安全Web学习笔记 @author: lamaper @email: lamaper@qq.com @blog: lamaper - 博客园 (cnblogs.com) @date: Aug.26 ...