利用python制作word成绩报告
1.导入
import openpyxl
from docx import Document
from docx.shared import Pt, Cm, RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT
2.封面
# 1 创建空白文档
doc = Document()
# 2 封面内容
p = doc.add_paragraph()
h1 = doc.add_heading(level=1)
run1 = h1.add_run("樱兰大学计算机学院", style="Title Char")
h2 = doc.add_heading(level=2)
run2 = h2.add_run("期末成绩分析报告")
doc.add_picture("files/校门图片.png", width=Cm(15), height=Cm(13))
# 1)封面样式
# 文本居中
p.paragraph_format.alignment =
h1.paragraph_format.alignment =
h2.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 字体样式
run1.font.size = Pt(25)
run2.font.size = Pt(45) #字体大小
run2.font.bold = True #加粗
run1.font.color.rgb = run2.font.color.rgb = RGBColor(0, 0, 0)
#封面落款
p3 = doc.add_paragraph('樱兰大学计算机学院制')
p3.style.font.size = Pt(20)
p3.style.font.bold = True
p3.paragraph_format.first_line_indent = Pt(250)
p3.paragraph_format.space_before = Pt(40)
3.导入已有的excel表
注意:学生信息表是xlsx的,所以我们需要用openpyxl来操作表。
# 3 excel表
wb = openpyxl.open("files/学生信息.xlsx") # 读取
sheet = wb["students"] # 获取工作表
doc.add_page_break() # 添加换页
# 1)在word中添加表格
m_r = sheet.max_row
m_c = sheet.max_column
table = doc.add_table(m_r, m_c, style="Table Grid")
table.style.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 2)遍历工作表内容导入word表格中
rows = table.rows # 获取所有的行
cols = table.columns # 获取所有的列
for row in rows:
# 获取行下标
r_index = row._index
col_count = 1
if row._index == 0:
row.height = Pt(30) #表格高度
for value in row.cells:
value.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER #居中
p = value.paragraphs[0]
cell_value = str(sheet.cell(r_index + 1, col_count).value) # 获取每个单元格的值
run3 = p.add_run(cell_value) # 通过获取单元格的段落对象添加run来赋值
run3.font.name = "宋体"
r = run3._element.rPr.rFonts
r.set(qn('w:eastAsia'), '宋体')
run3.font.size = Pt(20)
col_count += 1
else:
row.height = Pt(30)
4.求及格率
sum_scores = 0 #总分
pass_scores = 0 #及格
scores = []
for x in range(2, m_r + 1):
value2 = sheet.cell(x, 4)
value3 = value2.value
scores.append(value3)
for num in scores:
sum_scores += num
if num >= 60:
pass_scores += 1
rate = pass_scores / (m_r - 1)
5.平均分
average_scores = sum_scores / (m_r - 1)
6.及格率和平均分的样式
p1 = doc.add_paragraph()
run4 = p1.add_run("及格率: ")
run41 = p1.add_run(str(rate))
run4.font.bold = True
run41.font.color.rgb = RGBColor(255, 0, 0)
p2 = doc.add_paragraph()
run5 = p2.add_run("平均分: ")
run5 = p2.add_run(str(average_scores))
run5.font.bold = True
p1.paragraph_format.space_before = p2.paragraph_format.space_before = Pt(10)
7.落款
p4 = doc.add_paragraph('计算机学院')
p4.style.font.size = Pt(20)
p4.style.font.bold = True
p4.paragraph_format.first_line_indent = Pt(280)
p4.paragraph_format.space_before = Pt(8)
p5 = doc.add_paragraph('2023年2月17日')
p5.style.font.size = Pt(15)
p4.style.font.bold = True
p5.paragraph_format.first_line_indent = Pt(280)
p5.paragraph_format.space_before = Pt(8)
8.保存
# 保存
doc.save("files/作业.docx")
print("保存成功")
9.效果展示