登记成绩之小东助手v1

问题描述

现有一份关于学生每次实验报告的汇总Excel表格,要求小东同志把成绩登记到对应的Word实验报告中去,一个班级95份,一共6次试验报告,总计480份报告。完全依靠手工,这是何等的毅力。。。鉴于此,特地写了一个简单的demo以备不时之需。

样例

图1 成绩表样例

图2 实验报告样例

需求: 将图1中的成绩登记在图2的成绩记录框中,要求字体样式除颜色为红色为红色外均保持一致。

实验环境

本文的实验环境是 Python 3.6.1 |Anaconda 4.4.0 (64-bit),Win10

实验准备

安装 python-docx

pip install python-docx

注意

安装的是 python-docx,而引入的是 docx

代码

# -*- coding: utf-8 -*-
# Author:gaozhengjie
# Blog:https://www.jianshu.com/u/02877dbc2662
# E-mail:3170601003@cuit.edu.cn
# Python Version:3.6.1
# Time:2018/1/16
# Description:登记成绩,从Excel中读取数据存储到Word的指定位置

import openpyxl
from docx import Document
from docx.shared import RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.shared import Pt
import re
import os

wb = openpyxl.load_workbook("成绩表.xlsx")  # 打开成绩文件
sheet = wb.get_sheet_by_name("Sheet1")  # 读取到指定的Sheet页
file_list = os.listdir()
file_list2str = "/".join(file_list)  # 将list转换为string

for i in range(2, sheet.max_row + 1):
	# 遍历学号,实验报告命名方式 "学号_姓名_实验报告.docx" 或 "学号_姓名_实验报告"
	# python-docx 库兼容处理 .docx 和 .doc

	info = str(sheet['A'+str(i)].value) + '_' + sheet['B'+str(i)].value + '_实验报告'
	filename_regex = re.compile(info + r'.doc(x)?')  # x可选
	mo = filename_regex.search(file_list2str)
	if mo == None:
		# 没有匹配到,则将该学生的信息单独打印或保存在一个文本中,便于后续人工登记
		print('*' * 50)
		print("出错信息:未找到该文件 " + info)
		print('*' * 50)
	else:
		filename = mo.group()
		document = Document(filename)
		table = document.tables[0]  # 取Word中的第一个表格
		if table.cell(4,0).text == "成绩":
			table.cell(4,1).text = ''  # 清空表格中的内容
			score = str(sheet['C'+str(i)].value)
			run = table.cell(4,1).paragraphs[0].add_run(score)  # 添加段落内容
			table.cell(4,1).paragraphs[0].paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER  # 居中
			run.font.color.rgb = RGBColor(0xff, 0x00, 0x00)  # 红色字体
			run.font.size = Pt(14)  # 字体大小 四号,14磅
			run.font.bold = True  # 加粗
			document.save(filename)  # 保存
		else:
			print('*' * 50)
			print("出错信息:未找到成绩栏 " + info)
			print('*' * 50)

参考文献

[1] 字体大小与磅数的对应关系
[2] Python自动化修改word实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风醉雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值