0.概述

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

python自动生成文件报告 python自动生成word文档_python

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文件

结果为:


python自动生成文件报告 python自动生成word文档_字符串_02

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的表格中。

python自动生成文件报告 python自动生成word文档_字符串_03

5.存在的问题
 

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