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

之前写过一篇 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

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python办公自动化是指使用Python编写脚本和程序来完成办公工作,提高工作效率。其中一个常见的应用是对比并提取两份Word/Excel中的不同元素。 对于Word文档,我们可以使用Python的库python-docx来处理。首先,我们需要将两份Word文档分别读取到内存中,然后使用python-docx库的方法来提取文档的内容。我们可以将每个文档的内容按照段落或表格进行划分,然后逐个比较每个段落或表格的文本内容,找出不同的元素。可以使用if语句来判断两个文档中对应位置的内容是否相同,如果不同,则将其保存下来。最后,我们可以将提取出的不同元素输出到一个新的Word文档中,或者打印出来。 对于Excel表格,我们可以使用Python的库pandas来处理。首先,我们需要将两份Excel文件读取到内存中,然后使用pandas库的方法将每个文件中的工作表换为DataFrame对象。接下来,我们可以使用pandas库提供的函数来逐行或逐列比较两个DataFrame对象的值,找出不同的元素。同样地,可以使用if语句来判断两个DataFrame对象对应位置的值是否相同,如果不同,则将其保存下来。最后,我们可以将提取出的不同元素输出到一个新的Excel文件中,或者进行其他处理。 总之,通过使用Python编写脚本和调用相应的库,我们可以实现对比并提取两份Word/Excel文件中的不同元素,从而实现办公自动化的目标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值