将 doc 文件转为 docx 文件后取其中表格数据

经验分享:将 doc 文件转为 docx 文件后取其中表格数据

今天做项目的时候碰到了一个需求是取 doc 表格数据,直接在 Pycharm 中搞了一下,运行了一下可以初步达到效果,给大家分享一下
如果大家有别的更好的办法,也欢迎在评论区或开贴讲解一下。(环境为 Python3)

1. 导入包

这里有个坑是 python3 直接 pip 的 docx 包是不能用的,其中没有 Document 方法,运行时也会报一个找不到模块的错误。解决方法见此链接 (其中 whl 已经更新到 0.8.10 版本):
https://blog.csdn.net/jiangjieqazwsx/article/details/80326214

from docx import Document
import os
from win32com import client as wc

2.Doc 转 Docx

因为只找到了取 Docx 中表格的方法所以就先把 Doc 转 Docx,实际原理就是另存为后删除源文件

def change_doc_to_docx(docpath):  # doc转docx
    '''
    @param  : docpath 传入和传出文件夹的路径
    @return : None
    '''
    word = wc.Dispatch("Word.Application")
    doc = word.Documents.Open(docpath)
    # # 将文件名与后缀分割
    rename = os.path.splitext(docpath)
    # 将文件另存为.docx
    doc.SaveAs(rename[0] + '.docx', 12)  # 12表示docx格式
    doc.Close()
    os.remove(docpath)
    word.Quit()

3. 取 Docx 中表格数据

这步其实很简单,后面取出数据就根据实际需求来选择操作方式即可,因为我这只是初版,故只打印到控制台。

def get_docx_table(Path):   #取docs中表格
    doc = Document(path)
    tables = doc.tables
    for i in range(len(tables)):
        tb = tables[i]
        # 获取表格的行
        tb_rows = tb.rows
        # 读取每一行内容
        for i in range(len(tb_rows)):
            row_data = []
            row_cells = tb_rows[i].cells
            # 读取每一行单元格内容
            for cell in row_cells:
                # 单元格内容
                row_data.append(cell.text)
            print(row_data)