专栏首页datartisanPython办公自动化| word 表格转excel

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')

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

本文分享自微信公众号 - 乐享数据8090(gh_5703273a0562),作者:mba1398

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python办公自动化 | 批量word报告生成工具

    有时候我们需要按照某种规则生成一种固定模板的word报告,python能够很好的完成这项工作。本文通过一个小示例说明一下如何通过Python实现自动生成word...

    披头
  • 7天快速掌握MySQL-DAY4

    查询数据时,如果表名很长,使用起来不方便,此时,就可以为表取一个别名,用这个别名来代替表的名称 SELECT * FROM 表名 [AS] 别名; 注意,为表指...

    披头
  • mapinfo神操作之快速获取高铁隔离带内站点

    近期高铁项目经常会涉及到翻频,有时我们需要获取到高铁线路周边一定距离范围内的所有站点,如果大家不知道具体的操作方法的话,这些站点的获取是有一定困难的。

    披头
  • R语言学习 - 箱线图(小提琴图、抖动图、区域散点图)

    箱线图 箱线图是能同时反映数据统计量和整体分布,又很漂亮的展示图。在2014年的Nature Method上有2篇Correspondence论述了使用箱线图的...

    生信宝典
  • 在iOS中怎样创建可展开的Table View?(上)

    几乎所有的app都有一个共同特征,它们向用户提供了多个视图控制器来导航和工作.这些视图控制器可以用在很多方面,例如,简单地显示某种信息在屏幕上,或者从用户的输入...

    hrscy
  • 处于UITableView中心线cell的处理

    且行且珍惜_iOS
  • 面试题 —— 数字幻方

    请将 1~9 这 9 个数字填入 3x3 的矩阵,使得矩阵的横三行竖三列以及两对角线的数字和相等,找出所有的填充方案。比如下面的这个幻方就是满足条件的方案之一

    老钱
  • cell高度的缓存1——利用字典进行缓存

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

    用户1451823
  • Swift 2.0 自定义cell和不同风格的cell

          昨天我们写了使用系统的cell怎样创建tableView,今天我们再细分一下,就是不同风格的cell,我们怎写代码。先自己创建一个cell,继承于U...

    Mr.RisingSun
  • iOS自定义UICollectionView和UITableView单元格选中样式

    陈满iOS

扫码关注云+社区

领取腾讯云代金券