• 【python获取.doc内表格指定单元格数据】


    python获取.doc内表格指定单元格数据

    需求说明

    读取.doc内表格中指定数据并以对象形式输出
    1、获取第一张表内:部门编码、物料编码、退库数量(数字型)、物料质量问题描述、物料来源、填写人数据
    2、获取第二张表格内:采购人员ID
    
    • 1
    • 2
    • 3

    案例表格:在这里插入图片描述

    #pic_center)

    代码部分

    import os
    import docx
    from docx import Document #导入库
    from win32com.client import Dispatch
    from openpyxl import  Workbook 
    from openpyxl import workbook
    from openpyxl import load_workbook
    '''
    获取绝对地址,
    如果是doc的转换为docx。
    '''
    #文件相对路径
    def doc2docx(file_path):
        file_name, file_extension = os.path.splitext(file_path)#获取文件名、文件扩展名
        file_abs_path = os.path.abspath(file_path) #通过相对路径获取绝对路径
        if file_extension in [".doc"]:
            #打开word应用程序
            wd=Dispatch("Word.application")
            #后台运行
            wd.Visible = 0
            wd.DisplayAlerts = 0
            #打开doc文档,必须给一个绝对路径
            doc=wd.Documents.Open(file_abs_path)
            #另存为docx
            doc.SaveAs(file_abs_path+r"x",12)#12表示docx格式
            #关闭文档
            doc.Close()
            #退出word应用
            wd.Quit()
            file_abs_path = file_abs_path+r"x"#更新路径为docx的路径
    
    
        '''
        读取word的表格内的数据。
        '''
        
        list = ['部门编码', '物料编码', '退库数量(数字型)','物料质量问题描述','物料来源','填写人']
        word = Document(file_abs_path) #读入文件
        s=word.tables[1] #docx内读取第二张表
        t=word.tables[0] #docx内读取第一张表
    
      
        lo = {} # 存储每一行去重后的数据 第二张表信息
        for ss in range(0, len(s.rows)):
                    for ll in range(0,len(s.row_cells(ss))):  # 提取row行的全部列数据并遍历
                        source = s.cell(ss,ll).text
                        if '采购人员ID:' == source:
                            lo['采购人员ID']=s.cell(ss,ll+1).text.strip()
    
        #第一张表信息
        for name in list:
            for row in range(0, len(t.rows)):
                row_list = []
                for col in range(0,len(t.row_cells(row))):  # 提取row行的全部列数据
                    #row_list.append(t.cell(row,col).text) # 去除字符串中的特殊字符,并添加到临时列表中
                    source = t.cell(row,col).text
                    if name == source:
                        lo[name]=t.cell(row,col+1).text.split('\n')[0].strip()
         
         #编号信息
        for paragraph in word.paragraphs:
            # 获取段落中的文本
            text = paragraph.text
            if '编号' in text:
               lo['编号']=text.split(':')[1].strip()
            else:
                pass
    
        print(lo)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
  • 相关阅读:
    [RoarCTF 2019]Simple Upload
    SpringCloud 学习(一)---- 微服务的概念
    京东产品上架如何批量上传商品素材?
    docker安装可视化Portainer界面
    字符统计柱状图
    经济不景气时,企业如何通过反向竞价节省成本?
    谈谈Dubbo的那些事
    【数据结构与算法】第一章 绪论 2-数据结构的基本概念
    使用Puppeteer爬取地图上的用户评价和评论
    人工智能如何提高转录效率
  • 原文地址:https://blog.csdn.net/qq_56932454/article/details/133784346