You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
2.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 使用import导入openpyxl , docx
import openpyxl , docx
# 定义一个新函数replaceInfo包含参数docoldInfonewInfo
def replaceInfo(doc, oldInfo, newInfo):
# 遍历Word文件中的所有段落
for paragraph in doc.paragraphs:
# 遍历所有段落中的所有样式块
for run in paragraph.runs:
# 用.replace()方法将样式块文本需要被替换的旧字符串oldInfo替换成新字符串newInfo
run.text = run.text.replace(oldInfo, newInfo)
# 遍历Word文件中的所有表格
for table in doc.tables:
# 遍历所有表格中的所有行
for row in table.rows:
# 遍历所有行中的所有单元格
for cell in row.cells:
# 用.replace()方法将单元格文本需要被替换的旧字符串oldInfo替换成新字符串newInfo
cell.text = cell.text.replace(oldInfo, newInfo)
#从键盘输入文件路径
Path = input("请输入文件路径:")
# 添加data_only = True读取工作目录里名为"夜曲大学英语考试成绩.xlsx"的工作簿并赋值给变量wb
wb = openpyxl.load_workbook(f"{Path}/夜曲大学英语考试成绩.xlsx",data_only = True)
# 通过工作簿对象wb获取名为“汇总”的工作表对象并赋值给变量ws
ws = wb["汇总"]
# 为表头定义一个空的元组并赋值给变量firstRow
firstRow = ()
# 遍历工作表的所有行和其对应的索引
# 用变量rowIndex表示索引变量row表示每一行
for rowIndex, row in enumerate(ws.rows):
# 判断是第一行时
if rowIndex == 0:
# 将第一行数据赋值给变量firstRow
firstRow = row
# 非第一行数据时
else:
# 读取模板Word文档成绩报告单模版.docx并赋值给变量doc
doc = docx.Document(f"{Path}/成绩报告单模版.docx")
# 遍历每个单元格和对应的列索引
# 用变量columnIndex表示索引cell表示单元格
for columnIndex, cell in enumerate(row):
# 将该单元格对应列的表头使用columnIndex提取出
# 并赋值给变量oldInfo
oldInfo = firstRow[columnIndex].value
# 将单元格的值使用str()函数转换成字符串
# 并赋值给变量newInfo
newInfo = str(cell.value)
# 使用replaceInfo()函数替换doc文档内容
replaceInfo(doc, oldInfo, newInfo)
# 提取每行第一列的学生姓名并赋值给变量name
name = row[0].value
# 将doc文档保存在 学生成绩单 文件夹下,文件名格式为"成绩报告单_{姓名}.docx"
doc.save(f"{Path}/学生成绩单/成绩报告单_{name}.docx")