python文件处理:解析docx/word文件文字、图片、复选框

前言

        因为一些项目原因,我需要提供解析docx内容功能。本来以为这是一件比较简单的工作,没想到在解析复选框选项上吃了亏,并且较长一段时间内通过各种渠道都没有真正解决这一问题,反而绕了远路。

        终于,我在github python-docx模块的Issues中找到了重要的思路及线索,并最终通过后续努力,实现了【解析docx/word文件文字、图片、复选框】这一功能。

Feature: Read checkboxes in Word forms · Issue #224 · python-openxml/python-docx · GitHub

 python-docx基础操作

# 安装python-docx模块
pip install python-docx
import os
import docx
import time

# 图片附件的存储地址
image_save_path = 'appendix_dir'

# 读取docx表格里的数据,图片及文字
def read_table_from_docx(file_path):
    """
    :param file_path:
    :return: table_data, images
    """

    # 读取docx/word文件
    doc = docx.Document(file_path)

    # 获取docx中的table对象
    tables = doc.tables
    table_data = []
    images = []

    # 拿取文件中的图片对象,并存储在images列表里
    for rel in doc.part.rels.values():
        if "image" in rel.reltype:
            image = rel.target_part
            image_data = image.blob
            images.append(image_data)

    # 读取文件表格中的文字内容
    # 这里不能解析特殊字符和复选框
    # 并且合并单元格的文字内容,将出现多行多列重复出现,需要注意
    for table in tables:
        for row in table.rows:
            row_data = []
            for cell in row.cells:
                # print(cell, cell.text)
                row_data.append(cell.text)
            table_data.append(row_data)

    return table_data, images

table_data, images = read_table_from_docx('template.docx')
print(table_data)

# 另存docx图片到本地
for i, image_data in enumerate(images):
    # 拼接 存储图片 绝对路径
    image_name = f"expert_{int(time.time() * 1000)}.jpg"
    with open(os.path.join(image_save_path, image_name), "wb") as f:
        f.write(image_data)

拿取复选框选项 

        关于docx复选框,在这次项目中遇到了一种独特的复选框样式,这种样式并不是通过wps里的【复选框内容控件】创建的,让我一时没办法找到方向。

        这是正常用wps添加的复选框方式

        很明显,和我的目标不太一样

        二者都没办法通过【pytho

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值