参考链接: 通过Python-Docx模块在Python中读写MS Word文件

日常需要经常处理Word文档,发现了一个新的Python包:Python-docx,处理docx十分方便。

而且这个包和pandas包结合使用,可以在word插入excel表格,节省了很多复制、粘贴、调整表格样式的时间,真的很方便!

但是要注意:Python-docx只能处理docx、docx、docx文件!

下面给大家介绍一下如何使用Python-docx吧,抛砖引玉~

0. 学习思路

一、 基础!安装Python-docx,并对照”官方帮助说明“了解包的对象和基本函数;

这里建议在python交互模式下进行,可以直观的看到返回值和报错。

二、 出题!自己定义一个问题并解决,来加深对包的理解。

题目:”创建一个docx文件,要求输入2个表格,并且这个表格有填充的数字,表格前有相应标题。“

三、 进阶!试试包的更多函数,看会触发什么效果。

结合pandas,学习表格和字体、字号、颜色的处理

一、 基础

1.1 使用conda安装python-docx:

conda install -c conda-forge python-docx

没有了解过conda的同学,可以看看 Anaconda国内镜像停止后,怎么办?(已恢复),文中有简单介绍。

1.2 简要了解Python-docx:

官方帮助说明:https://python-docx.readthedocs.io/en/latest/index.html#

1 打开/读取文档

第一步当然是创建文档并打开啦~

from docx import Document

import os

path = "a.docx"

os.system("touch %s" %path) # 调用shell命令创建a.docx文件

documentNew = Document() # 不指定路径是创建文件

documnet = Document(path) # 指定路径是读取文件

w(゚Д゚)w 发现报错 PackageNotFoundError :

docx.opc.exceptions.PackageNotFoundError: Package not found ...

原来是因为a.docx中没有任何内容。打开a.docx之后输入几个字符,再重试以上代码,就不会报错了。

2 插入标题

使用 add_heading() 或add_paragraph()添加标题:

document.add_heading('Document Title', 0)

# 方法1

document.add_heading('Heading 1', level=1) # 用level设置,level为0-5,对应不同级别的标题

# 方法2

document.add_paragraph('Heading 1', style="Heading 1") # 用style来设置不同级别的标题

3. 插入段落

段落是word文档中最基本的对象之一。插入段落主要使用的函数是:

add_paragraph() #添加段落add_run() #追加文字

#插入段落, 同时设置粗体和斜体~

p = document.add_paragraph('A plain paragraph having some ')

p.add_run('bold').bold = True #粗体

p.add_run(' and some ')

p.add_run('italic.').italic = True #斜体

段落还可以使用style设置风格。

# 圆点列表

document.add_paragraph(

'first item in unordered list', style='List Bullet'

)

# 序号列表

document.add_paragraph(

'first item in ordered list', style='List Number'

)

# 引用

document.add_paragraph('Intense quote', style='Intense Quote')

4 插入图片

from docx.shared import Inches

document.add_picture('image-filename.png', width=Inches(1.0))

5 分页符

document.add_page_break()

6 插入表格

主要使用的函数:

add_table() # 新建表格add_row() # 添加行add_col() # 添加列table.cell(i, j).text() # 往表格中添加内容table.rows() # 行数table.cols() # 列数

records = (

(3, '101', 'Spam'),

(7, '422', 'Eggs'),

(4, '631', 'Spam, spam, eggs, and spam')

)

# 新建1行3列的表

table = document.add_table(rows=1, cols=3) # row行, col列

# 使用table 的rows()和columns()得到这个表格的行数和列数

print(len(table.rows))

print(len(table.columns))

# 添加标题行

hdr_cells = table.rows[0].cells # 注意 table.rows(0)表示第1行

hdr_cells[0].text = 'Qty'

hdr_cells[1].text = 'Id'

hdr_cells[2].text = 'Desc'

# 将records中的数据添加到新建的table中

for qty, id, desc in records:

row_cells = table.add_row().cells

row_cells[0].text = str(qty)

row_cells[1].text = id

row_cells[2].text = desc

如果熟悉pandas,那你肯定知道创建的dataframe默认会自带标题行。但是python-docx不同,需要自行添加标题行。这里要注意一下,不过别紧张不需要死记硬背,出现问题多调试就行~

7 保存文件

document.save(path) # 指定路径

二、 做题!

至此,官方文档的示例学的差不多了,基本上就是对标题、段落、表格和图片的处理。

下面来做一个简单的题目:

创建一个docx文件,要求输入2个三行七列的三线表。

表格1:标题栏为数字1到7。表格前有相应标题“1. 表格1”,标题的字体为等线,且为斜体。

表格2:标题栏为大写字母A到G。表格前有相应标题“2. 表格2”, 标题的字号为12,且为粗体。

希望你先自己写一下,有问题多搜索。然后再来看看我的答案,对比下思路的不同。这样学的更快,有问题也可以互相交流学习~

实现代码:

#!/bin/usr/env python

from docx import Document

from docx.shared import Pt # 设置字号

document = Document()

# 表格1

# 标题1,字体为等线,且为斜体

title1 = document.add_heading(u'1.表格1', level=1)

title1.style.font.name = u'等线' # 设置中文字体前面要有u

title1.italic = True

table1 = document.add_table(rows=3,cols=7) # 3行7列

# 设置表格标题栏

for i in range(7):

table1.cell(0,i).text = str(i+1)

table1.style="Light Shading" # 风格为三线表

# 表格2

# 标题2,字号为12,且为粗体

title2 = document.add_paragraph(u'2.表格2',style="heading 1")

title2.style.font.size = Pt(12)

title2.bold = True

table2 = document.add_table(rows=3,cols=7) # 3行7列

headLine = ["A","B","C","D","E","F","G"]

# 设置表格标题栏

for i in range(7):

table2.cell(0,i).text = headLine[i]

table2.style="Light Shading" # 风格为三线表

# 储存

document.save("test.docx")

最终结果↓ :

三、进阶

3.1 表格样式模板:

参考官方文档:python-docx:Table styles in default template (表格默认样式模板)

其中常用的有 Light Shading(三线表)↓ :

Table Grid(网格型)↓ :

Light Grid(浅色网格)↓ :

Medium List 1(中等深浅列表1) ↓:

Medium List 2(中等深浅列表2) ↓ :

可以点击查看 python---word表格样式设置. 蜗v牛. CSDN 查看更多样式示例。但是现在的Python-docx包代码有些更新,样式和该链接中的图例部分有出入。使用时需要自行调试~

3.2 自定义表格样式

先试试下面的代码~

from docx import Document # 输出docx

from docx.shared import Pt # 设置字号

from docx.shared import Cm # 设置宽度,单位是cm

from docx.shared import RGBColor # 设置字体颜色

document = Document()

table = document.add_table(6,2, style="Normal Table")

colHeadLine = ["A","B","C","D","E","F"]

for i in range(6):

# 给单元格赋值的同时修改样式,不影响整个表格

cell = table.cell(i,0)

cell.width = Cm(2) # 设置单元格宽度为2cm

run = cell.paragraphs[0].add_run(colHeadLine[i])

run.font.color.rgb = RGBColor(0,100,0)

run.font.name = u'等线'

run.italic = True

table.columns[0].width=Cm(3)

# 修改整个表格的字体样式

table.style.font.size = Pt(10)

# 保存

document.save("test.docx")

3.2.1 表格自动适应窗口大小:

table.autofit = True

3.2.2 自定义表格宽度或高度:

a. 方法1:

table.cell(row,col).width = Cm(4) #

table.cell(row,col).height = Cm(4)

b. 方法2:

特别需要注意的是,column和row后面是有s的!

官方文档中有无s标注错误,害得我还以为不能这样操作,捂脸.jpg。

table.columns[0].width=Cm(2) # 不起效,不知道为什么

table.rows[0].height=Cm(2)   # 起效

3.2.3 对齐

a. 表格对齐:

table.alignment = WD_TABLE_ALIGNMENT.CENTER #居中

table.alignment = WD_TABLE_ALIGNMENT.LEFT   #靠左

table.alignment = WD_TABLE_ALIGNMENT.RIGHT  #靠右

b. 文字对齐:

# 水平方向

table.cell(row,col).paragraphs[0].paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER

table.cell(row,col).paragraphs[0].paragraph_format.alignment = WD_ALIGN_PARAGRAPH.LEFT

table.cell(row,col).paragraphs[0].paragraph_format.alignment = WD_ALIGN_PARAGRAPH.RIGHT

# 垂直方向

table.cell(row,col).vertical_alignment = WD_ALIGN_VERTICAL.CENTER

table.cell(row,col).vertical_alignment = WD_ALIGN_VERTICAL.TOP

table.cell(row,col).vertical_alignment = WD_ALIGN_VERTICAL.BOTTOM

3.3 add_run() 设置字体、字号和颜色

from docx import Document

from docx.shared import Pt # 设置字号

from docx.shared import RGBColor # 设置字体颜色

document = Document()

p = document.add_paragraph('A plain paragraph')

run = p.add_run(' is plain') # 注意is之前的空格

run.font.name = u'等线' #设置字体

run.font.size = Pt(10.5) # 设置字号

run.font.color.rgb = RGBColor(250,0,0) # 设置字体颜色

# 保存

document.save("test.docx")

3.3 结果

3.4 结合pandas的iloc函数,将dataframe写入word

import pandas as pd

from docx import Document # 输出docx

from docx.shared import Pt # 设置字号

document = Document()

df = pd.read_csv(a.csv, sep="t")

rowNum = df.shape[0] + 1 # 行数,加标题栏

colNum = df.shape[1] # 列数

table = document.add_table(rows=rowNum, cols=colNum, style = "Light Grid")

table.cell(0,0).text = "a"

table.cell(0,1).text = "b"

table.cell(0,2).text = "c"

table.cell(0,3).text = "d"

for i in range(1, rowNum):

for j in range(colNum):

cell = table.cell(i,j)

cell.text = str(df.iloc[i-1,j])

table.autofit = True

table.style.font.name = u'等线'

table.style.font.size = Pt(12)

document.save(outPutDocx)

一个示例 ↓ :

四、总结

如何创建和读取文档插入标题、段落、图片、分页符和表格进阶学习,表格和段落的字体、字号、颜色的处理

后续如果发现更多有趣的用法,也会更新本文~

觉得有用别忘记点赞呀~

感谢O(∩_∩)O~

以上!

梨酱:[论文写作 1] 如何用word批量制作三线表?​zhuanlan.zhihu.com

梨酱:[Linux 1] Shell“ 多线程”,提高工作效率​zhuanlan.zhihu.com

梨酱:[生信资料 3] 生物信息学常见数据格式,汇总!​zhuanlan.zhihu.com

参考:

python错误:docx.opc.exceptions.PackageNotFoundError: Package not found at 'new.docx'解决办法. 向东的笔记本. CSDN python---word表格样式设置. 蜗v牛. CSDN python-docx,what can it do. Python读写docx文件. CSDN. 利用python批量处理Word文件——正文、标题. xtfge0915. 利用python-docx批量处理Word文件—图片. Giser张博. CSDN. 利用python-docx批量处理Word文件——表格. Giser张博. CSDN. 利用python-docx批量处理Word文件——表格(二)样式控制. Giser张博. CSDN.

[转载] html转word table样式_[Python02] Python-docx包的使用,快速处理 Word 文件!相关推荐

  1. python docx table 生成_从Python docx生成docx文件,pythondocx

    python-docx是python编程语言的一个库,可以对docx文档进行读,同时也可以进行生成docx文档,这篇文档主要是讲生成docx文档. 1.生成一个空docx文档 # coding:utf ...

  2. python docx包_[Python02] Python-docx包的使用,快速处理 Word 文件!

    日常需要经常处理Word文档,发现了一个新的Python包:Python-docx,处理docx十分方便. 而且这个包和pandas包结合使用,可以在word插入excel表格,节省了很多复制.粘贴. ...

  3. python获取word页数_使用Python的word文档的页数(Number of pages of a word document with Python)...

    使用Python的word文档的页数(Number of pages of a word document with Python) 有没有办法用Python有效地获得word文档(.doc,.doc ...

  4. python生成word 带目录_利用python程序生成word和PDF文档的方法

    一.程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用fr ...

  5. 电脑word在哪_求职必会!她是微软Office Word认证大师,想教你成为效率10倍提升的Word高手...

    2020春招已经开始下面六个公号每天陆续有春招信息发出还没拿到offer的同学,务必关注别错过 高薪校招汇总 春招大全 500强汇总 校招精选 校招季 名企汇总 有没有哪一款办公软件,是几乎每个人都需 ...

  6. python word保存图_使用python matplotlib 画图导入到word中如何保证分辨率

    在写论文时,如果是菜鸟级别,可能不会花太多时间去学latex,直接用word去写,但是这有一个问题,当我们用其他工具画完实验彩色图时,放到word中会有比较模糊,这有两个原因导致的. 原因一:图片导入 ...

  7. python xlsxwriter行数_使用python库xlsxwriter库来输出各种xlsx文件的示例

    功能性的文章直接用几个最简单的实现表达: xlsxwriter库的核心就是其Workbook对象. 创建一个指定名字的xlsx文件: import xlsxwriter filename = '/Us ...

  8. python psycopg2使用_安装python依赖包psycopg2来调用postgresql的操作

    1.先安装psycopg2的依赖组件 本案例的操作系统为linux red hat 在安装python依赖包psycopg之前,你必须需要先安装postgresql数据库的相关组件: postgres ...

  9. html转word保留样式_译员必备 | 初识Word格式标记

    标 记 含 义 在计算机术语中,标记 (markup) 是使用称为标记(tag)的代码来定义任何数据的结构.外观以及含义的过程. 运营过公众号的小伙伴一定熟悉微信编辑器.我们在使用模板排版好文字时,点 ...

最新文章

  1. SpringMVC 处理multipart形式数据:java方式配置文件上传
  2. TiM:清华杨云锋-微生物功能性状的新兴模式
  3. 李开复:明年会有一批AI公司倒闭
  4. Linux中包的管理与程序安装
  5. 使用Memory Analyzer tool(MAT)分析内存泄漏
  6. Zabbix小版本升级
  7. Rails下cloud datastore的使用
  8. Java千百问_04异常处理(007)_常见的java异常有哪些(非运行时)
  9. 在try中写了return,后面又写了finally,是先执行return还是先执行fianlly
  10. Oracle日期函数TRUNC
  11. 基于JavaScript+css的购物网站项目
  12. html语言开关控制灯泡,用js控制电灯开关
  13. 如何使用JavaScript实现前端导入和导出excel文件(H5编辑器实战复盘)
  14. iOS开发中键盘样式和自定义键盘。
  15. abb机器人常见维故障现象
  16. 悲剧的与幽默的人生态度——宗白华
  17. 100万算大钱还是小钱?
  18. Excel的数据可视化和Python的有什么不同?
  19. multisim仿真 74LS147D芯片
  20. 如何使用html实现在线秒表,js实现简单的秒表

热门文章

  1. 【USACO1.2】【Luogu1206】回文平方数 Palindromic Squares(枚举,构造函数,进制)
  2. mysql 8.0 yum_CentOS7使用yum安装MySQL8.0
  3. java 邮件客户端 smtp_java网络编程三:基于SMTP的邮件发送客户端
  4. git工作区和暂存区(4)
  5. jquery淡入淡出效果及突出显示案例
  6. poj 1985 Cow Marathon 【树的直径】
  7. Happy Necklace
  8. java编译异常和运行时异常_浅谈异常结构图、编译期异常和运行期异常的区别...
  9. [leetcode]5178. 四因数
  10. 块状树(bzoj 3720: Gty的妹子树)