python处理word、ppt、excel
介绍采用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的更多相关文章
- Windows:Word,PPT,EXCEL com+组件配置
本文所涉及到配置前提: 服务器必须安装Office套件(Word,PPT,Excel) 第一部分 Word Com+组件权限配置 1.cmd模式输入dcomcnfg 2.找到Microsoft Wor ...
- python读写word、excel、csv、json文件
http://blog.csdn.net/pipisorry/article/details/50368044 python读写word文档 (include wps)将word文档转换成txt文档 ...
- java实现word,ppt,excel,jpg转pdf
word,excel,jpeg 转 pdf 首先下载相关jar包:http://download.csdn.net/detail/xu281828044/6922499 import java.io. ...
- .net 实现Office文件预览 Word PPT Excel 2015-01-23 08:47 63人阅读 评论(0) 收藏
先打个广告: .Net交流群:252713569 本人QQ :524808775 欢迎技术探讨, 近期公司要求上传的PPT和Word都需要可以在线预览.. 小弟我是从来没有接触过这一块的东西 感觉很棘 ...
- Java中Office(word/ppt/excel)转换成HTML实现
运行条件:JDK + jacob.jar + jacob.dll 1) 把jacob.dll在 JAVA_HOME\bin\ 和 JAVA_HOME\jre\bin\ 以及C:\WINDOWS\sys ...
- word ppt excel文档转换成pdf
1.把word文档转换成pdf (1).添加引用 using Microsoft.Office.Interop.Word; 添加引用 (2).转换方法 /// <summary> /// ...
- Python操作Word与Excel并打包
安装模块 # Word操作库 pip install docx # Excel操作库 pip install openpyxl # 打包exe工具 pip install pyinstaller Wo ...
- libreoffice python 操作word及excel文档
1.开始.关闭libreoffice服务: 开始之前同步字体文件时间,是因为创建soffice服务时,服务会检查所需加载的文件的时间,如果其认为时间不符,则其可能会重新加载,耗时较长,因此需事先统一时 ...
- 全套Office办公软件WORD/PPT/EXCEL视频教程 每日更新中
详情见Processon分享链接:https://www.processon.com/view/link/5b3f40abe4b09a67415e2bfc
- office(Word、Excel、PPT等图标异常和桌面无新建解决方案)
前言吐槽: 前不久因为安装了WPS,然后觉得不好用卸载WPS装回office就出现了一个很恶心的问题:word文档.excel文档.PPT这些办公软件图标异常,显示的是下面这样: 打开倒是可以正常用w ...
随机推荐
- 【C++复习】运算符优先级(简)
只讨论个大概,不管细节不同优先级的运算符混在一起,就根据优先级算相同优先级的运算符混在一起,就看它们的结合性(这里不谈) 一定要记住:括号>基本计算>关系>逻辑>底层选手 1. ...
- linux上安装python3(yum方式)
可联通外网的linux系统终端上安装python3 1,建立yum仓库: https://mirrors.163.com/centos/7.9.2009/os/x86_64/ 2,使用yum下载安装对 ...
- 使用oledb读写excel出现“操作必须使用一个可更新的查询”的解决办法
使用oledb读写excel出现"操作必须使用一个可更新的查询"的解决办法 转自:http://www.cnblogs.com/Richinger/archive/2008/09/ ...
- [Unity]自定义地图编辑器(Scene视图下,EditorWindow的简单应用)
最近的游戏又很多关卡需要配置(XML保存),给策划写了个非常简单的编辑器,记录下+废话下 1:Editor下打开新窗口需要继承EditorWindow,然后使用获取窗口即可,注意放在Editor文件夹 ...
- S-HR常用源码
1.public static String getUserId(Context ctx) { UserInfo userInfo = ContextUtil.getCurrentUse ...
- adb的详解
1.何为adb adb(Android Debug Bridge)是android sdk的一个工具 adb是用来连接安卓手机和pc端的桥梁,要有adb作为二者之间的维系,才能让用户在电脑上对手机进行 ...
- vue3中reactive数据被重新赋值后无法双向绑定,使用reactive包裹数组如何正确赋值?
需求:将接口请求到的列表数据赋值给响应数据arr const arr = reactive([]); const load = () => { const res = [2, 3, 4, 5]; ...
- C++数组(二):二维数组
二维数组 什么是二维数组?二维数组就是在一维数组的基础上增加一个维度. 二维数组的定义方式 数据类型 数组名[行数][列数]; int arr[2][3]; arr[0][0] = 1; arr[0] ...
- Linux安装Jemalloc
在安装Jemalloc之前首选安装解压工具,Jemalloc源来自Github一般服务器很少安装bzip2解压 bzip2安装命令 yum -y install bzip2 CnetOS完整安装Jem ...
- 069_VisualForce Ajax 更多用法解读02
一.同步调用的异常处理:AJAX Toolkit try catch... <html> <head> <script src="/soap/ajax/44. ...