系列文
利用python自动写Word文档(一)——python-docx初探
利用python自动写Word文档(二)——用python-docx修改页面方向及字体
利用python自动写Word文档(三)——用Python-docx修改表格
0.概述
上一篇文章中我们使用了python-docx创建了Word文件,并插入文字内容和表格,这篇文章我们继续讨论如何修改文字字体、段落格式及文档页面。
1.页面设置
页面方向有横向与竖向,新建Document时,默认的是竖向页面,要设置为我们目标的横向,需要设置三个参数,分别为section.orientation, section.page_width, section.page_height。
sections=document.sections
section=sections[0] #获取单个节
new_pagewidth,new_pageheight=section.page_height,section.page_width
#设置三个参数
section.orientation = WD_ORIENT.LANDSCAPE
section.page_height=new_pageheight
section.page_width=new_pagewidth
注:如果只设置参数section.orientation=WD_ORIENT.LANDSCAPE,不设置另外两个参数,页面方向并不发生变化;如果设置了section.page_height,section.page_width两个参数,不设置section.orientation,页面会根据前两个参数设置页面尺寸进行调整。
2.字体修改
在python-docx中,word主要有两种文本格式等级:块等级(block-level)和内联等级(inline-level)。word中大部分内容都是由这两种等级的对象组成。
块对象主要有标题、段落、图片、表、列表也是块。
内联对象是块对象的组成部分块对象的所有内容都包含在内联对象中,一个块对象由一个或多个内联对象组成。run 是常用的内联对象。
在修改字体、字号、文字颜色时,都要用到run。
2.1.字体样式修改
(1)创建标题块对象或者段落快对象
(2)新建一个run,并填写要写为文字。
(3)修改run.font.name的值为对应的字体名称。
(4)当设置的字体是中文字体是,还需要调用._element.rPr.rFonts的set()方法。
from docx.oxml.ns import qn
p = document.add_paragraph()
run=p.add_run('编制人: 审核: ')
run.font.name = u'宋体'
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
注:如果不用._element.rPr.rFonts的set()方法,Word里的中文字体为MS Mincho (中文正文),如下图,虽然是一样的字体,但是显示的文字字体和粗细都不一样。
使用._element.rPr.rFonts的set()方法后,中文字体显示都是宋体。
2.2.字号修改
(1)创建标题块对象或者段落快对象
(2)新建一个run,并填写要写为文字。
(3)修改run.font.size的值。
from docx.shared import Pt
head=document.add_heading(0)
run=head.add_run('需要制作的文档')
run.font.size = Pt(24) #设置大小为24磅
2.3.文字颜色修改
(1)创建标题块对象或者段落快对象
(2)新建一个run,并填写要写为文字。
(3)修改run.font.color.rgb的值。
from docx.shared import RGBColor
run=head.add_run('需要制作的文档')
run.font.color.rgb = RGBColor(0,0,0) #设置颜色为黑色
3.标题或段落对齐方式
(1)创建标题块对象或者段落快对象head
(2)修改head.alignment的值。
from docx.enum.text import WD_ALIGN_PARAGRAPH,WD_LINE_SPACING
head=document.add_heading(0)
head.alignment = WD_ALIGN_PARAGRAPH.CENTER#居中
代码更新
这里,我们学习了修改页面方向、字体、段落的对齐方式,那么上一篇文章中的代码更新如下:
#导入所需要的库
from docx import Document
from docx.shared import Inches
#~~~~~~~~~~~~~~~~~~~~本章新加内容1 strart~~~~~~~~~~~~~~~~~~~~~~~~~~~~
from docx.enum.section import WD_ORIENTATION
from docx.shared import RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH,WD_LINE_SPACING
from docx.oxml.ns import qn
from docx.shared import Cm
from docx.shared import Pt
#~~~~~~~~~~~~~~~~~~~~本章新加内容1 end~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 首先创建一个文档对象
document = Document()
#~~~~~~~~~~~~~~~~~~~~本章新加内容2 strart~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#修改页面为横板
sections=document.sections
section=sections[0]
new_pagewidth,new_pageheight=section.page_height,section.page_width
section.page_height=new_pageheight
section.page_width=new_pagewidth
# 添加标题,并修改字体样式
head=document.add_heading(0)
run=head.add_run('需要制作的文档')
run.font.name=u'黑体' #设置字体为黑体
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'黑体')
run.font.size = Pt(24) #设置大小为24磅
run.font.color.rgb = RGBColor(0,0,0) #设置颜色为黑色
head.alignment = WD_ALIGN_PARAGRAPH.CENTER#居中
#添加子文档
p = document.add_paragraph()
run=p.add_run('2019年03月24日至2020年03月25日')
run.font.name = u'宋体'
run.font.size = Pt(14) #设置大小为14磅
p.alignment = WD_ALIGN_PARAGRAPH.RIGHT #右对齐
#~~~~~~~~~~~~~~~~~~~~本章新加内容2 end~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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:
# 添加表格
row_cells = table.add_row().cells
array=list(map(eval,line.split(",")))
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()
#~~~~~~~~~~~~~~~~~~~~本章新加内容3 strart~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p = document.add_paragraph()
run=p.add_run('编制单位: ')
run.font.name = u'宋体'
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
run.font.size = Pt(14) #设置大小为14磅
p.alignment = WD_ALIGN_PARAGRAPH.RIGHT #右对齐
p = document.add_paragraph()
run=p.add_run('编制人: 审核: ')
run.font.name = u'宋体'
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
run.font.size = Pt(14) #设置大小为14磅
p.alignment = WD_ALIGN_PARAGRAPH.RIGHT #右对齐
#~~~~~~~~~~~~~~~~~~~~本章新加内容3 end~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 将文档保存到docx中
try:
document.save('RUSULT.docx')
except:
print("文件被占用,请关闭后重试!")
运行结果
本次我们解决了页面方向设置、文字字体、颜色、大小、对齐方式的问题,但是表格的格式尚未更改。下次我们继续讨论如何用python-docx表格样式、合并表格等。
参考资料:
[1]修改文档页面帮助文档 https://python-docx.readthedocs.io/en/latest/user/sections.html
[2]https://www.jianshu.com/p/22466614bee8
[3]https://www.jianshu.com/p/ca815a8b3d0a
[4]修改字体的方法 https://blog.csdn.net/wuxiyue238/article/details/81085137