分析word文档国有企业的干部任免审批表时,需要将家庭关系提取出来以进行信息比对。
import os
from docx import Document
from openpyxl import Workbook
import re
def extract_tables_from_word_folder(folder_path, excel_file):
# 获取文件夹内的文件列表
file_list = os.listdir(folder_path)
# 计算文件数量
file_count = len(file_list)
print(file_count)
# 创建 Excel 工作簿
wb = Workbook()
ws = wb.active
'''
此处不宜定义列名,因为word表格如果有合并单元格,那么可能存在重复列数据.
如果数据规范,则不必从文件名中取出姓名
'''
# # 定义列名
# column_names = ["文件名称", "领导干部", "称谓","姓名", "出生年月",
"政治面貌","工作单位及职务"]
# # 写入列名
# ws.append(column_names)
# 遍历文件夹中的所有 Word 文件
for file in os.listdir(folder_path):
if file.endswith('.docx') or file.endswith('.doc'):
doc = Document(os.path.join(folder_path, file))
# # 获取第一个表格的第一行第二个单元格的值
# first_table = doc.tables[0]
# second_cell_value = first_table.rows[0].cells[1].text
# 遍历文档中的所有表格
for table in doc.tables:
# 遍历表格中的所有行
for row in table.rows:
# 检查整行内容是否包含指定字符串下列对于称谓的判断可能不够准确,
# 因为输入不规范。
if "家\n庭\n主\n要\n成\n员\n及\n重\n要\n社\n会\n关\n系" in '\\'.join([cell.text for cell in row.cells]) and row.cells[1].text!= "称 谓\n" :
# 创建一个空列表来存储当前行的单元格内容
row_data = [cell.text for cell in row.cells]
# 删除政治面貌重复列.注意需要先知道哪列重复
del row_data[5]
# 提取文件名称中的姓名
file_name = os.path.splitext(file)[0]
match = re.search(r'[\d.]*\s*([^:|\-]+)', file_name)
if match:
name = match.group(1)
# 列表连接。将文件名、姓名和row_data连接起来
ws.append([os.path.splitext(file)[0],name] + row_data[1:-1])
# 保存 Excel 文件
wb.save(excel_file)
# 指定文件夹路径和 Excel 文件路径
folder_path = r"D:\jupyter\word\干部任免表"
excel_file = '干部家庭关系.xlsx'
# 调用函数将文件夹中的 Word 文件内容提取到 Excel 中
extract_tables_from_word_folder(folder_path, excel_file)