当前位置:首页>python>办公神器!用Python搞定带照片的登记表,100份文档只用了1秒钟(附代码)

办公神器!用Python搞定带照片的登记表,100份文档只用了1秒钟(附代码)

  • 2026-09-28 13:26:26
办公神器!用Python搞定带照片的登记表,100份文档只用了1秒钟(附代码)
最近我分享了一期关于生成Word模板的文章《Python 一键批量生成信息表,照片 + 座位号全自动排版,告别重复无效劳动!》,今天就有小伙伴找来要求帮其解决根据登记表模板填写个人信息并添加照片的问题。
说实话,以前处理这种问题最快捷的方法就是使用邮件合并功能,邮件合并功能对添加图片确实不太友好,对于不熟悉的小伙伴来说,问题也是接连不断。经过我耐心的示范演示,最终成功解决了这个问题。
于是,也就有了下面的小工具。
解决这个问题,前提是有一个Excel表格、一个Word文档和一个照片文件夹。
Excel表格用于保存个人基本信息,一人一行、第一行是标题行;
Word文档中是一个表格,用于填写信息和插入照片;
照片文件夹用来保存jpgs格式的照片,文件名用人员姓名命名。
配置完成后,系统会自动生成每个人的登记表,插入照片,并统一调整字体和对齐方式。
有了这个小工具,以后不管是100人,还是1000人,——也就是喝口水的功夫。
下面是该工具的精简版实现代码:
import pandas as pdfrom docx import Documentfrom docx.shared import Inches  # 图片大小from docx.enum.text import WD_ALIGN_PARAGRAPH   # 文本对齐方式from docx.shared import Pt      # 字号大小from docx.oxml.ns import qn     # 字体from pathlib import Path        # 路径import timedef table_text(doc,r,c,text,size=14):    para = doc.tables[0].cell(r,c).paragraphs[0]    para.alignment = WD_ALIGN_PARAGRAPH.CENTER   # 居中对齐    run = para.add_run(text)                     # 添加文字    run.font.size = Pt(size)                     # 字号大小    run.font.name = "仿宋"                       # 字体名称    run._element.rPr.rFonts.set(qn("w:eastAsia"),run.font.name)s_t = time.time()xls_path = r"C:\Users\Administrator\Desktop\信息登记\信息汇总表.xlsx"doc_file = r"C:\Users\Administrator\Desktop\信息登记\登记表模板.docx"doc_path = Path(r"C:\Users\Administrator\Desktop\信息登记")png_folder = doc_path.joinpath("照片")df = pd.read_excel(xls_path)for _,row in df.iterrows():    doc = Document(doc_file)    table_text(doc,0,1,row["姓名"])    table_text(doc,0,3,row["性别"])    table_text(doc,0,5,str(row["出生日期"]))    table_text(doc,1,1,row["政治面貌"])    table_text(doc,1,3,row["民族"])    table_text(doc,1,5,row["学历"])    table_text(doc,2,1, row["籍贯"])    table_text(doc,2,5,str(row["身份证号"]))    table_text(doc,3,1, row["工作单位"])    table_text(doc,3,5,str(row["电话"]))    cell = doc.tables[0].cell(0,6)    para = cell.paragraphs[0]    para.alignment = WD_ALIGN_PARAGRAPH.CENTER    # 居中对齐    run = para.add_run()    pic_name = png_folder / f"{row["姓名"]}.jpg"    if pic_name.exists():        run.add_picture(str(pic_name),width=Inches(1.2),height=Inches(1.6))    doc.save(doc_path / f"{row["姓名"]}.docx")print(f"已完成!用时{time.time()-s_t:.3f}秒")
这段代码基本逻辑就三步:
1、读数据。用pandas读取Excel表格中的信息。
2、填模板。用python-docx打开一个做好的空白模板,把信息按位置填进去。
3、贴照片。根据姓名去文件夹找照片,插入到表格对应的单元格里。100余份文档,用时仅0.982秒。
几点说明:
1、自定义函数:往表格里填文字,并设置格式。
def table_text(doc,r,c,text,size=14):    para = doc.tables[0].cell(r,c).paragraphs[0]    para.alignment = WD_ALIGN_PARAGRAPH.CENTER   # 居中对齐    run = para.add_run(text)                     # 添加文字    run.font.size = Pt(size)                     # 字号大小    run.font.name = "仿宋"# 字体名称    run._element.rPr.rFonts.set(qn("w:eastAsia"),run.font.name)
这个函数做了几件事:
  • 定位表格的行和列。
  • 把文字填写进去。
  • 设置格式。默认格式为自动居中、字号为14、字体为仿宋。run._element.rPr.rFonts.set(qn("w:eastAsia"),run.font.name)作用是确保中文字体正确显示。
2、核心循环,一人一份
df = pd.read_excel(xls_path)for _,row in df.iterrows():    doc = Document(doc_file)    # 填文字    # 插照片    doc.save(doc_path / f"{row["姓名"]}.docx")
每一份登记表都是基于同一个模板重新生成。这样做可以确保每次打开的模板都是空白的。
3、插入照片的细节
 cell = doc.tables[0].cell(0,6)    para = cell.paragraphs[0]    para.alignment = WD_ALIGN_PARAGRAPH.CENTER    # 居中对齐    run = para.add_run()    pic_name = png_folder / f"{row["姓名"]}.jpg"if pic_name.exists():        run.add_picture(str(pic_name),width=Inches(1.2),height=Inches(1.6))
照片大小默认设置为1.2英寸宽、1.6英寸高。if pic_name.exists()的作用是若存在照片则插入;若不存在,则跳过,避免抛出异常。
如果你也正被这些繁琐的表格搞得头大,不妨试试这个小工具。

最新文章

随机文章