09 用Python生成word文档(二)

一、背景

已有学生成绩表xscj.xls(同上一篇08),通过python生成学生成绩通知书(将所生学生通知书存于一个word文档中)

xscj.xls如下:

 

 二、已安装doc文件操作第三方库python-docx

 

  三、代码如下:


import xlrd

from docx import Document # 安装时安装的是python-docx,导入时导入Document。
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn # 中文格式
from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Cm, Pt, RGBColor
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.enum.table import WD_ALIGN_VERTICAL

import time

# 获取学生成表格
cj_b = xlrd.open_workbook("d:/python/xscj.xls")
cj_s = cj_b.sheet_by_index(0)
nrows = cj_s.nrows

# today=time.strftime("%Y-%m-%d",time.localtime()) #获取当前日期,不支持中文
# today=time.strftime("%Y/%m/%d",time.localtime()) #获取当前日期,不支持中文
# today=time.strftime("year-%Y month-%m day-%d",time.localtime()) #获取当前日期,不支持中文

# 以中文格式获取当前日期
today = time.strftime("%Y{y}%m{m}%d{d}", time.localtime()).format(y='年', m='月', d='日')

# 将学生成绩存入列表中
xscj_all = []
for i in range(1, nrows):
xscj_one = []
xm = str(cj_s.cell(i, 1).value)
yw = cj_s.cell(i, 3).value
sx = cj_s.cell(i, 4).value
yy = cj_s.cell(i, 5).value
ll = cj_s.cell(i, 6).value
jn = cj_s.cell(i, 7).value
zf = cj_s.cell(i, 8).value
xscj_one = [xm, yw, sx, yy, ll, jn, zf]
xscj_all.append(xscj_one)

# 创建学生成绩通知书文档
document = Document()
document.styles['Normal'].font.name = u'宋体' # 设置文档的基础字体
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') # 设置中文字体

# 利用循环生成多位学生成绩通知书(每位学生一页)
for i in xscj_all:
p1 = document.add_paragraph() # 初始化建立第一个自然段
p1.alignment = WD_ALIGN_PARAGRAPH.CENTER # 设置对齐方式为居中,默认左对齐
run1 = p1.add_run('学生成绩报告') # 设置第一段的文字内容
run1.font.name = "华文行楷"
run1._element.rPr.rFonts.set(qn('w:eastAsia'), u'华文行楷') # 设置中文字体
run1.font.size = Pt(35) # 设置字体大小为35磅
run1.font.bold = True # 设置加粗
p1.space_after = Pt(10) # 设置段后10磅
p1.space_before = Pt(10) # 设置段前10磅

p2 = document.add_paragraph() # 初始化建立第一个自然段
run2 = p2.add_run('%s 同学你的成绩如下:' % i[0]) # 设置第一段的文字内容
run2.font.name = '华文仿宋'
run2._element.rPr.rFonts.set(qn('w:eastAsia'), u'华文行楷') # 设置中文字体
run2.font.size = Pt(20) # 设置字体大小为20磅

# 设置表格,将成绩显示在表格中
table = document.add_table(rows=2, cols=7, style="Medium List 1 Accent 2")
table.style.font.size = Pt(16)
table.style.font.color.rgb = RGBColor(255, 0, 0)
table.rows[0].height = Cm(1)
hdr_cells = table.rows[0].cells
width1 = 4
hdr_cells[0].text = '姓名'.center(width1) # center调整文字位置
hdr_cells[1].text = '语文'.center(width1)
hdr_cells[2].text = '数学'.center(width1)
hdr_cells[3].text = '英语'.center(width1)
hdr_cells[4].text = '理论'.center(width1)
hdr_cells[5].text = '技能'.center(width1)
hdr_cells[6].text = '总分'.center(width1)

table.rows[1].height = Cm(1)
hdr_cells = table.rows[1].cells
hdr_cells[0].text = i[0].center(len(str(i[1])))
hdr_cells[1].text = str(i[1]).center(len(str(i[1]))+2)
hdr_cells[2].text = str(i[2]).center(len(str(i[2]))+2)
hdr_cells[3].text = str(i[3]).center(len(str(i[3]))+2)
hdr_cells[4].text = str(i[4]).center(len(str(i[4]))+2)
hdr_cells[5].text = str(i[5]).center(len(str(i[5]))+2)
hdr_cells[6].text = str(i[6]).center(len(str(i[6]))+2)

p4 = document.add_paragraph() # 初始化建立第一个自然段
p4.alignment = WD_ALIGN_PARAGRAPH.RIGHT # 设置对齐方式为右对齐
run4 = p4.add_run('\n郓城县高级技工学校') # 设置第一段的文字内容
run4.font.name = '华文仿宋'
run4._element.rPr.rFonts.set(qn('w:eastAsia'), u'华文行楷') # 设置中文字体
run4.font.size = Pt(20) # 设置字体大小为20磅
run4 = p4.add_run('\n') # 加入换行不分段符
run4 = p4.add_run('%s' % (today)) # 设置第一段的文字内容
run4.font.name = '华文仿宋'
run4._element.rPr.rFonts.set(qn('w:eastAsia'), u'华文行楷') # 设置中文字体
run4.font.size = Pt(20) # 设置字体大小为20磅

document.add_page_break() # 设置分页

document.save('d:/python/通知书.docx')
 

 附:Python中word的表格样式(style)

0 Normal Table  
1 Table Grid  
2 Light Shading  
3 Light Shading Accent 1  
4 Light Shading Accent 2  
5 Light Shading Accent 3  
6 Light Shading Accent 4  
7 Light Shading Accent 5  
8 Light Shading Accent 6  
9 Light List  
10 Light List Accent 1  
11 Light List Accent 2  
12 Light List Accent 3  
13 Light List Accent 4  
14 Light List Accent 5  
15 Light List Accent 6  
16 Light Grid  
17 Light Grid Accent 1  
18 Light Grid Accent 2  
19 Light Grid Accent 3  
20 Light Grid Accent 4  
21 Light Grid Accent 5  
22 Light Grid Accent 6  
23 Medium Shading 1  
24 Medium Shading 1 Accent 1  
25 Medium Shading 1 Accent 2  
26 Medium Shading 1 Accent 3  
27 Medium Shading 1 Accent 4  
28 Medium Shading 1 Accent 5  
29 Medium Shading 1 Accent 6  
30 Medium Shading 2  
31 Medium Shading 2 Accent 1  
32 Medium Shading 2 Accent 2  
33 Medium Shading 2 Accent 3  
34 Medium Shading 2 Accent 4  
35 Medium Shading 2 Accent 5  
36 Medium Shading 2 Accent 6  
37 Medium List 1  
38 Medium List 1 Accent 1  
39 Medium List 1 Accent 2  
40 Medium List 1 Accent 3  
41 Medium List 1 Accent 4  
42 Medium List 1 Accent 5  
43 Medium List 1 Accent 6  
44 Medium List 2  
45 Medium List 2 Accent 1  
46 Medium List 2 Accent 2  
47 Medium List 2 Accent 3  
48 Medium List 2 Accent 4  
49 Medium List 2 Accent 5  
50 Medium List 2 Accent 6  
51 Medium Grid 1  
52 Medium Grid 1 Accent 1  
53 Medium Grid 1 Accent 2  
54 Medium Grid 1 Accent 3  
55 Medium Grid 1 Accent 4  
56 Medium Grid 1 Accent 5  
57 Medium Grid 1 Accent 6  
58 Medium Grid 2  
59 Medium Grid 2 Accent 1  
60 Medium Grid 2 Accent 2  
61 Medium Grid 2 Accent 3  
62 Medium Grid 2 Accent 4  
63 Medium Grid 2 Accent 5  
64 Medium Grid 2 Accent 6  
65 Medium Grid 3  
66 Medium Grid 3 Accent 1  
67 Medium Grid 3 Accent 2  
68 Medium Grid 3 Accent 3  
69 Medium Grid 3 Accent 4  
70 Medium Grid 3 Accent 5  
71 Medium Grid 3 Accent 6  
72 Dark List  
73 Dark List Accent 1  
74 Dark List Accent 2  
75 Dark List Accent 3  
76 Dark List Accent 4  
77 Dark List Accent 5  
78 Dark List Accent 6  
79 Colorful Shading  
80 Colorful Shading Accent 1  
81 Colorful Shading Accent 2  
82 Colorful Shading Accent 3  
83 Colorful Shading Accent 4  
84 Colorful Shading Accent 5  
85 Colorful Shading Accent 6  
86 Colorful List  
87 Colorful List Accent 1  
88 Colorful List Accent 2  
89 Colorful List Accent 3  
90 Colorful List Accent 4  
91 Colorful List Accent 5  
92 Colorful List Accent 6  
93 Colorful Grid  
94 Colorful Grid Accent 1  
95 Colorful Grid Accent 2  
96 Colorful Grid Accent 3  
97 Colorful Grid Accent 4  
98 Colorful Grid Accent 5  
99 Colorful Grid Accent 6

posted on 2020-02-27 14:31  神密探索  阅读(142)  评论(0)    收藏  举报

导航