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}秒")