python获取.doc内表格指定单元格数据
- 需求说明
- 代码部分
需求说明
读取.doc内表格中指定数据并以对象形式输出
1、获取第一张表内:部门编码、物料编码、退库数量(数字型)、物料质量问题描述、物料来源、填写人数据
2、获取第二张表格内:采购人员ID
案例表格:
#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)