当前位置:首页>python>Python 一键批量生成信息表,照片 + 座位号全自动排版,告别重复无效劳动!

Python 一键批量生成信息表,照片 + 座位号全自动排版,告别重复无效劳动!

  • 2026-10-10 15:40:32
Python 一键批量生成信息表,照片 + 座位号全自动排版,告别重复无效劳动!
先来看问题:
现有一个名为“考生信息.xlsx”的工作簿,保存着某学校一次考试中学生的姓名、考点、考场、准考证号码、座位号码等信息。
考生的照片单独保存在一个文件夹内,照片以学生的准考证号码命名。
现需要把考生的基本信息和照片以表格的形式汇总到一起,并保存为Word格式。
对于学校老师、教务行政的朋友而言,每次期中、期末考试前最让人头疼就整理考场信息表了。
一个年级几十个考场,每个考场要把学生的照片、准考证号、座位号排版到一个文档中,还要按考点、考场分类生成文件,一忙就是好几天,一点有变动,还得重头再来。
简单来说,任务就是根据Excel中的考生信息(如:考点、考场、考号、座位号等)自动生成每个考场的信息汇总表:
  • 每个考场单独生成一个Word文档。
  • 每个文档由表格组成,按照顺序排列学生信息。
  • 每个单元格包含:考生照片、座位号、准考证号、姓名等。
  • 照片要从文件夹内根据准考证号读取
今天就以此为例,分享一段Python自动化办公实用脚本,不用复杂的操作,几十行代码就能全自动批量生成所有考场的Word文档,照片自动插入、格式自动对齐,让你彻底解放双手!
先来看完整代码:
import pandas as pdfrom docx import Documentfrom docx.shared import Inches  # 图片大小from docx.enum.text import WD_ALIGN_PARAGRAPH   # 文本对齐方式from pathlib import Pathfrom times_t = time.time()xls_path = r"E:\期中考试\考生信息.xlsx"doc_path = Path(r"E:\期中考试")png_folder = doc_path.joinpath("照片")df = pd.read_excel(xls_path)df_group = df.groupby(by=["考点名称","考场"])for name, group in df_group:    kaodian_name = name[0]   # 考点    kaochang_name = name[1]   # 考场    doc = Document()    doc.add_paragraph("明德小学三年级期中考试").alignment = WD_ALIGN_PARAGRAPH.CENTER      # 居中对齐    doc.add_paragraph(f"考点:{kaodian_name}    考场:{kaochang_name}")   # 添加文字    stu_rows = len(group)   # 学生总数    rows = (stu_rows+2)//3  # 表格行数    table = doc.add_table(rows=rows, cols=3)    table.style = "Table Grid"  # 表格样式    idx = 0    for r in range(rows):        for c in range(3):            if idx >= stu_rows:                break            row_data = group.iloc[idx]            zkzh = str(row_data["准考证"])            seat_num = row_data["座位号"]            name_stu = row_data["姓名"]            pic_name = png_folder/f"{zkzh}.png"            cell = table.cell(r,c)            para = cell.paragraphs[0]            run = para.add_run()            try:                if pic_name.exists():                    run.add_picture(str(pic_name),width=Inches(1.2),height=Inches(1.6))                    para.alignment = WD_ALIGN_PARAGRAPH.CENTER                else:                    run.add_text('无图片')            except:                run.add_text('无图片')            cell.add_paragraph(f"座位号:{seat_num}")            cell.add_paragraph(f"准考证:{zkzh}")            cell.add_paragraph(f"姓 名:{name_stu}")            idx += 1    doc_path_new = doc_path / f"{kaodian_name}-{kaochang_name}.docx"    doc.save(doc_path_new)print(f"已完成!用时{time.time()-s_t:.3f}秒")
再来看效果:
用时仅0.486秒,几乎是瞬间完成!
再来说说关键知识点
一、数据分组。df_group = df.groupby(by=["考点名称","考场"])是按"考点名称"、"考场"按原始信息表分成若干组。每一组对应一个考点的考场。
二、 添加文字并居中对齐。doc.add_paragraph("明德小学三年级期中考试").alignment = WD_ALIGN_PARAGRAPH.CENTER是使用.add_paragraph()方法添加文字,.alignment = WD_ALIGN_PARAGRAPH.CENTER表示居中对齐。
三、创建带边框的表格。table = doc.add_table(rows=rows, cols=3)指定行数和列数,直接生成标准表格,table.style ="Table Grid"为表格样式。
四、表格中插入照片。run.add_picture(照片路径,width=Inches(宽度),height=Inches(高度))自动匹配照片、设置尺寸,Inches为英寸单位。para.alignment = WD_ALIGN_PARAGRAPH.CENTER照片居中对齐,更符合阅读习惯。
运行完代码,你会发现在指定路径的文件夹内会保存着一堆Word文档,每个文档都以考点+考场命名,直接打开就能用。
这段代码可以解决老师们很多麻烦,希望能帮到更多有需要的朋友。如果你觉得有用的话,别忘了点赞+转发,让更多的朋友看到~~~

最新文章

随机文章