import pandas as pdfrom docx import Documentimport time#记录程序开始运行时间s_t = time.time()#word模板路径和Excel数据路径doc_path = r"D:\社区调查\人口基础信息采集表.docx"xls_path = r"D:\社区调查\网格名单.xlsx"#户主信息在Word表格中的位置:行号+列号table_hz = {"姓名":[1,2],"性别":[1,5],"出生年月":[1,9], "民族":[2,2],"户籍地":[2,5],"联系方式":[2,9], "政治面貌":[4,2],"公民身份号码":[4,5], "家庭住址":[5,4],"是否外务工":[6,4]}#家庭成员各字段在Word表格的中列位置table_cy = {"称谓":1,"姓名":2,"公民身份号码":4,"户籍地":5, "政治面貌":6,"是否外务工":8,"工作/学习单位":9}#无户主的家庭no_huzhu_list = []#生成Word文档的数量huzhu_num = 0#读取所有户信息df = pd.read_excel(xls_path)df["出生年月"] = pd.to_datetime(df["出生年月"]).dt.strftime("%Y-%m-%d")#根据家庭住址分组df_group = df.groupby(by="家庭住址")for address, cy_data in df_group: doc = Document(doc_path) table = doc.tables[0] #筛选出当前户的户主 huzhu_data = cy_data[cy_data["称谓"] == "户主"] #校验户主信息是否存在 if not huzhu_data.empty: huzhu = huzhu_data.iloc[0] #填充户主信息到Word表格指定位置 for v, [r,c] in table_hz.items(): table.cell(r,c).text = str(huzhu[v]) #填充家庭成员到Word表格指定位置,包括户主 for i,(_,row) in enumerate(cy_data.iterrows()): for k,v in table_cy.items(): table.cell(8+i,int(v)).text = row[k] #保存Word,文件以家庭住址+户主命名 doc.save(rf"D:\社区调查\{address}_{huzhu['姓名']}.docx") huzhu_num += 1 else: #无户主信息列表 no_huzhu_list.append(address)#输出处理结果print(f'共保存{huzhu_num}户信息')print(f'以下{len(no_huzhu_list)}户无户主信息,请核实')print(f'{"\n".join(no_huzhu_list)}')print(f'用时{time.time()-s_t:.2f}秒')