用python编辑word的好处_用Python-docx编辑word文档,使用,pythondocx

心路历程

朋友让我做几十份报告。数据来源于excel表格。为此,计划先手动做一个word模板,根据源数据,修改文档指定内容。查找了一些关于docx的使用方法,讲的比较多,尝试过程中也走了些弯路。所以想写一份更加清晰易懂的帮助文档。 必须要说,我是python新手,第一次发文章,主要是写给自己的笔记。

安装python-docx 包

cmd:

pip install python-docx

Tip

:

打开cmd窗口时,记得以administrator 模式打开,否则可能会提醒‘permission denied’ 导致无法安装库文件

58cb77d7a623ab4606491fdb5d3857d7.png

word文件基础操作

关于docx库的详细使用方法,可以查看网站介绍:

官方文档

1.打开与保存文档

import docx

dir_tar_file_name = r'D:\workspace\self\Report-01.docx'

wd = docx.Document(dir_tar_file_name)

# 保存文件

wd.save(dir_tar_file_name)

docx 模块库只能处理 .docx 格式文件,如果时doc格式的,需要提前转换。

所有对文档的编辑工作需要在word关闭的状态下进行,否则会引发错误。

docx中对象类型

a. paragraph 段落对象

paragraph 很好理解,就是段落的意思。包括标题和按序号排版的内容。

举个例子

57c357fc10259e6f658b32f881f5597c.png

获取paragraph的方式:

wd = docx.Document(dir_tar_file_name)

para=wd.paragraphs

print('总共有 %s 段文字' %(len(para)))

for i in para:

print(i.text)

运行结果,可以看到每一个段落分割符切分一个paragraph. 获取段落文本即其text属性。

a2417903d8cb5fd96e506b8863a6af23.png

新建paragraph

new_paragraph=wd.add_paragraph('新增一个段落内容')

#在段落前插入一段

add_before_para=new_paragraph.insert_paragraph_before('在刚才那段话前插入这段话')

b. table 表格对象

word中经常会有表格,以下是获取表格文本对象的方式:

tables->table->columns/rows->cells->text

tables=wd.tables

print('总共有%s个表格'%(len(tables)))

print('第一个表有%s行,%s列'%(len(tables[0].rows),(len(tables[0].columns))))

print('******按列打印*******')

for col in tables[0].columns:

for row in col.cells:

print (row.text)

print('******按行打印******')

for row in tables[0].rows:

for col in row.cells:

print(col.text)

Result:

7dbd8bf1e8d147c796224c3dc1c34bb0.png

以下 是修改tables的常用方法:

#新建一个表格

table=rew_record.add_table(rows=2,cols=2)

#获取第二个单元格

cell=table.cell(0,1)

cell.text='填在第一行第二列'

#获取第二行单元格

second_cells=table.rows[1].cells

second_cells[0].text='一'

second_cells[1].text='二'

#新增一行

cells=table.add_row().cells

cells[0].text='1'

cells[1].text='2'

c. picture 图片对象

获取图片

docx并不擅长处理picture对象,暂时无法获取文档中的图片需要借助其他工具,知道一个思路可以借鉴:

将文档后缀改为zip,然后打开,会发现所有的图片都在word->media文件夹下,所以可以需要处理zip格式文件的方法。

添加图片

from docx.shared import Inches

#导入Inches为了调整图片尺寸,默认尺寸往往过大

#可以设置width/height

wd.add_picture(r'C:\Users\\timg1.jpg',width=Inches(1.0))

d. style 格式对象

style即文档中的段落/字体格式,style 对象对应着word中的Styles工具栏内容。如下图:

8f8c9244505c56e5de253c91f1c9d213.png

表格格式的name可以通过modify看到

0f8c9afa530e3c90c8c4ef3a1733c29f.png

修改段落文本格式最简单的方法是重新给对象指定style名,和人为操作类似。所以需要提前把文本模板的格式创建并固定下来,免去后面再去更改字体或字体大小的麻烦。

方法就是在styles中,create a New style

这里面可以把style的作用域进行设置:paragraph/character/Table/List ,如果一个段落中有多种文本格式,需要使用character style。暂时不需要理解,等遇到实际问题了再回头看这句话。

c739e8d46b4c01e57cd7dff26ff8355d.png

e81c6317273ffdec1938938738de95ae.png

** 获取文档的所有格式**

#获取styles,注意 仅能get到文档中所使用过的类型

styles=wd.styles

for style in styles:

print(style.name)

435bc738a09f9545b2a2236aec7aea22.png

获取段落,或表格的格式属性,并替换到其他格式。

#修改第二段的格式,设置为2级标题

para[1].style=styles['Heading 2']

#修改表格格式

tables[0].style=style['Table Grid']

编辑style 属性

编辑的是style的属性,不是仅仅修改指定文档的格式

修改字体大小/斜体/加粗

from docx.shared import Pt

style1.font.size =Pt(12) #设为12号字

style1.font.italic=True #斜体

style1.font.bold=True #加粗

style1.font.underline=True #下划线

段落中的多style格式处理-run 对象

如果段落中有多种格式,对paragraph.text修改会把格式覆盖掉,docx根据style类型不同将一段文字按run进行切割。

for run in wd.paragraphs[3].runs:

print(run.text)

result:

df152ce84df9bc21a8ffed690ff35397.png

例如:下面这段文字

8e634e69f507af73c08d41a715b1cde2.png

把表格中的统计数据,填写到文档中,并把小于30的值加上下划线。

#需要提前设定两个style类型

if int(run.text[0:2])<=30:

run.style=styles['Style_under1']

else:

run.style=styles['Style_Nounder']

大概整理这些,有其他常见问题我再补充。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值