Python办公自动化 | word 表格转excel

    技术2025-05-04  26

    之前写过一篇 Python办公自动化 | 批量word报告生成工具 ,有小伙伴提出了逆向需求,即:从批量word中获取内容并写入excel,需求背景是汇总一些材料,举例:实习鉴定表、个人简历、档案等。

    实际需求是这样的,现在有如下格式的若干word文档,需要录入标黄信息到excel,手工录入效率太低了,能不能用python实现呢?答案是肯定的

    安装 docx

    pip install pothon-docx

    导入 docx

    from docx import Document

    读取 word 文件

    doc=Document('模板.docx')

    读取表格

    tb=doc.tables

    读取行

    rows=tb[0].rows

    读取列

    cols=rows[0].cells

    读取单元格

    cell=cols[0] text=cell.text

    单个文件内容获取

    docx 读取word中的表格时会按照最大行和最大列对表格取消合并单元格,比如样例文件,最大行数是5,最大列数是8,他就给扩展成5 * 8的表格,而且数据自动向右填充。分析样例文件结果,需要获取的数据在前三行(起始编号0),第一行是获取1、3、5、7列值(起始编号0),第二行是获取3、5、7列值,第3行是获取3、7列值 获取单个文件3行标黄文字程序如下:

    row = [] # 获取第一行数据 for i in range(1,8,2): cell = tb.cell(0, i) txt = cell.text if cell.text != '' else ' ' # 无内容用空格占位 row.append(txt) # 获取第二行数据 for j in range(3,8,2): cell = tb.cell(1, j) txt = cell.text if cell.text != '' else ' ' # 无内容用空格占位 row.append(txt) # 获取第三行数据 for k in range(3,8,4): cell = tb.cell(2, k) txt = cell.text if cell.text != '' else ' ' # 无内容用空格占位 row.append(txt)

    多个文件内容获取

    单个文件内容获取了,批量就好说了,只要传入一个文件夹,遍历文件夹获取想要的文件就可以了,通用代码示例如下:

    path = input('请输入文件夹路径: ') files = os.listdir(path) docx_list = [] for f in files: if os.path.splitext(f)[1] == '.docx': docx_list.append(path + '\\' + f) else: pass

    通过如上代码获取了文件夹下所有的docx文件,采用list嵌套list的方法批量获取内容

    mat = [] for n in range(len(docx_list)): doc=Document(docx_list[n]) tb=doc.tables[0] # print(len(tb.rows), len(tb.columns)) # 行数、列数 row = [] # 获取第一行数据 for i in range(1,8,2): cell = tb.cell(0, i) txt = cell.text if cell.text != '' else ' ' # 无内容用空格占位 row.append(txt) # 获取第二行数据 for j in range(3,8,2): cell = tb.cell(1, j) txt = cell.text if cell.text != '' else ' ' # 无内容用空格占位 row.append(txt) # 获取第三行数据 for k in range(3,8,4): cell = tb.cell(2, k) txt = cell.text if cell.text != '' else ' ' # 无内容用空格占位 row.append(txt) mat.append(row)

    写入 excel

    由于pandas太庞大了,杀鸡焉用牛刀,此处采用xlwt写入excel。

    创建工作簿

    workbook = xlwt.Workbook(encoding = ‘utf-8’)

    添加sheet(支持覆盖写入)

    xlsheet = workbook.add_sheet(“Sheet1”,cell_overwrite_ok=True)

    添加表头

    table_head = ['xNAME','xSEX','xDANG','xZHI','xYUNA','xBAN','xHAO','xTIME','xPLACE'] headlen = len(table_head) for i in range(headlen): xlsheet.write(0,i,table_head[i])

    写入数据

    for i in range(len(mat)): for j in range(len(row)): xlsheet.write(i+1,j,mat[i][j])

    保存工作簿 xlwt 主要是支持 .xls文件格式 workbook.save(‘学生实习鉴定表.xls’)

    执行程序便得到如下汇总内容:

    代码和样例文件下载

    链接:https://pan.baidu.com/s/1gjpXDhutnsU4P8xI1uHpmg 提取码:gcfd

    Processed: 0.012, SQL: 9