登记成绩之小东助手v1

作者: 高正杰 | 来源:发表于2018-01-16 23:03 被阅读21次

    问题描述

    现有一份关于学生每次实验报告的汇总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实例

    相关文章

      网友评论

        本文标题:登记成绩之小东助手v1

        本文链接:https://www.haomeiwen.com/subject/uimeoxtx.html