先贴下项目需求。
需要从图1表格中将一个项目的数据分条录入图2中word中的表格。
我的思路是先遍历表格,将项目名存为一个集合,这样就得到了不重复的项目名信息。
这里遇到了一个问题,读取数据的时候需要保留部分字段数字的文本格式,例如01,02之类的,如果不进行任何操作直接读取的话,读取的是数字格式,这里就需要给要保留格式的列一个指定格式。
df = pd.read_excel("GZB.xlsx",sheet_name="Sheet1",dtype={"一级类":object,"二级类":object})
df.set_index("序号",inplace = True)
xmm = set(df["项目名"])
然后我们遍历集合,将项目名相等的保存为一个DataFrame。
for i in xmm:
a = df.loc[df["项目名"]==i,:]
接着就是把数据输出到模板表格中了。doc,tables相当于是整个文档中表格的列表,如果要用到第一张表,在写入的时候就选择doc.tables[0]。
表格中的合并单元格是算作两个或多个单元格表示的,例如第一列的一二行是合并单元格,它们在python中还是作为同一列的两个单元格计数的。
hdr = tables2.rows[b+2].cells
hdr[0].text = str(b + 1)
hdr[1].text = str(a.iloc[b]["村名"])
hdr[2].text = str(a.iloc[b]["一级类"])
hdr[3].text = str(a.iloc[b]["汇总"])
hdr[4].text = str(a.iloc[b]["二级类"])
hdr[5].text = str(a.iloc[b]["汇总"])
hdr[6].text = str(a.iloc[b]["汇总"])
hdd = tables2.rows[22].cells
hdd[3].text = str(a.iloc[b]["合并"])
hdd[5].text = str(a.iloc[b]["合并"])
hdd[6].text = str(a.iloc[b]["合并"])
以上就是把所有数据依次填入表格。
还可以依次设置每个单元格的居中格式等。
for row in range(23):
for col in range(7):
cell = tables2.cell(row,col)
pa = cell.paragraphs[0]
pa.alignment = WD_ALIGN_PARAGRAPH.CENTER