利用python自动写Word文档(一)——python-docx初探


 

0.概述

最近需要重复写格式一致的Wrod文件,具体格式如下图,文档包含文字和表格,想找一种自动写的工具,根据一个记录了X1,Y1,X2,Y2的TXT文档自动生成下图的文档,免去每天的重复编辑。偶然间在慕课上得知python-docx的资源库,于是开始了,python-docx的摸索之旅。

image.png

1.安装库文件

        安装方法:命令提示行中输入安装命令。

pip install python-docx #安装python-docx库

 

2.编程环境选择

        我选择的是VS code。一是慕课上老师推荐;二是在知乎上看到一个帖子[1],博主用了很多工具后,最终选择了VS code。


3.开始学习


3.1代码示例


        在python-docx帮助手册第一页给出了一个比较完成的示例:https://python-docx.readthedocs.io/en/latest/

from docx import Document #导入库
from docx.shared import Inches #支持修改文字大小的库
document = Document()  #新建空文档
document.add_heading('Document Title', 0)  #增加标题“Document Title”,第二个参数“0”表示是标题

#添加段落并设置文字格式
p = document.add_paragraph('A plain paragraph having some ') #增加一段话
p.add_run('bold').bold = True  #添加字符串“bold”,并将字体设置为加粗
p.add_run(' and some ')   #添加字符串“ and some”
p.add_run('italic.').italic = True #添加字符串“italic.”,并将字体设置为斜体

#添加一级标题
document.add_heading('Heading, level 1', level=1) #添加一级标题Heading, level 1 

#添加文字'Intense quote',格式为'Intense Quote'
document.add_paragraph('Intense quote', style='Intense Quote')
document.add_paragraph(    'first item in unordered list', style='List Bullet')document.add_paragraph(    'first item in ordered list', style='List Number')document.add_picture('monty-truth.png', width=Inches(1.25)) #添加图片,并设置宽度
records = ( 
    (3, '101', 'Spam'),
    (7, '422', 'Eggs'),
    (4, '631', 'Spam, spam, eggs, and spam')
)
table = document.add_table(rows=1, cols=3) #添加1行3列的表格

#填充表给字段名称
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'

#根据record元组数据逐一填写表格
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
document.add_page_break()  #添加分页符
document.save('demo.docx')  #保存docx文件

结果为:

image.png

3.2重点函数


        从这段文字中学习了主要的函数:
(1)新建文档: document = Document();
(2)添加标题:add_heading();
(3)增加段落:
                add_paragraph()
                add_run()   #这个函数很重要,下章我会重点讲到
(4)添加图片:add_picture()
(5)添加表格:add_table()
(6)添加分页符:add_page_break()
(7)保存文件:save()。


4.开始编程


        根据学习的这些函数,结合开始提出的需求,试着写了一下代码,实现了一个有表格的Word自动生成,但是很多细节需要修改,先不多说,看看第一版代码。


 

#导入所需要的库
from docx import Document
# 首先创建一个文档对象
document = Document()
# 添加标题
head=document.add_heading('需要制作的文档',0)
#添加段落p = document.add_paragraph('2019年03月24日至2020年03月25日')

f1=open("out.txt")
table = document.add_table(rows=1, cols=11)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '序号'
hdr_cells[1].text = '字段'
hdr_cells[2].text = '日期'
hdr_cells[3].text = 'x1'
hdr_cells[4].text = 'y1'
hdr_cells[5].text = 'x2'
hdr_cells[6].text = 'y2'
hdr_cells[7].text = '重要性'
hdr_cells[8].text = '整数'
hdr_cells[9].text = '类型'
hdr_cells[10].text = '备注'

for line in f1:
    array=list(map(eval,line.split(",")))
    # 添加表格记录
    row_cells = table.add_row().cells
    row_cells[3].text = str(array[0])
    row_cells[4].text = str(array[1])
    row_cells[5].text = str(array[2])
    row_cells[6].text = str(array[3])
    row_cells[7].text = '正常'
    row_cells[8].text = '10'
    row_cells[9].text = 'P'
f1.close()
p = document.add_paragraph("编制单位:******")
p = document.add_paragraph('编制人:                 审核:')
# 将文档保存到docx中
try:
    document.save('RUSULT.docx')
except:
    print("文件被占用,请关闭后重试!")

 

        这样,已经完成了新建文档、插入文字、插入表格,并且实现了txt文档的读入并写到word的表格中。

image.png

5.存在的问题
 


        可以看到出来的结果与开始提出的要求还是有差距的,具体表现有:
(1)如何设置字体、大小、位置?标题居中,修改字号。第二行时间区间需要右对齐。
(2)如何修改表格样式?显示表格线,修改列宽,合并单元格?
(3)如何修改页面方向?将竖版变成横版。
        以上问题,下章继续讨论。

        感谢以下作者提供的帮助:
[1]Jackpop.我最终还是选择了VS code.   https://zhuanlan.zhihu.com/p/93239107

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值