当前位置: 首页 > news >正文

python批量读取word表格写入excel固定位置

01批量填写excel文档


仅提供一种思路和方法,远离复制粘贴!!!!!

一、代码功能概述​

        本代码用于从指定目录及其子目录中查找特定的 Word 文件(.docx格式),提取文件中指定表格的数据,并将这些数据写入到一个 Excel 模板文件的对应单元格中,最后将修改后的 Excel 文件以特定格式命名并保存。

二、代码分步骤详解

1. 导入必要的库

import os
import pandas as pd
from docx import Document
from openpyxl import load_workbook

os:用于处理文件和目录操作,如遍历目录、拼接文件路径等。​

pandas:虽然在当前代码中未实际使用,但常用于数据处理和分析,后续扩展可能会用到。​

Document(来自docx库):用于读取和操作.docx格式的 Word 文档。​

load_workbook(来自openpyxl库):用于加载和操作.xlsx格式的 Excel 文件。

2. 加载 Excel 模板

# 加载 Excel 模板
wb = load_workbook(r"E:\000代码测试\01office\模板.xlsx")
# 选择目标工作表(如 Sheet1)
sheet = wb["1-不动产登记申请书"]

通过load_workbook函数加载指定路径下的 Excel 模板文件,并选择其中名为 “1 - 不动产登记申请书” 的工作表,后续将在该工作表中写入数据。

3. 定义查找目标文件的函数

def find_target_files(root_dir, target_filename):"""循环遍历文件夹(包括子文件夹),查找指定文件名的文件:param root_dir: 根目录路径:param target_filename: 要查找的固定文件名(如 "数据汇总.xlsx"):return: 找到的文件路径列表"""target_files = []# 遍历根目录下的所有文件和子文件夹for dirpath, dirnames, filenames in os.walk(root_dir):# 检查当前目录下是否有目标文件if target_filename in filenames:# 拼接完整文件路径file_path = os.path.join(dirpath, target_filename)target_files.append(file_path)read_words(target_files)

该函数使用os.walk递归遍历root_dir目录及其子目录,查找名称为target_filename的文件。若找到,将文件的完整路径添加到target_files列表中,并调用read_words函数处理找到的文件。

4. 定义读取 Word 文件数据的函数

def read_words(files):for file_path in files:print(file_path)doc = Document(file_path) tables = doc.tablestable = tables[1]  # 索引从0开始,若需其他表格可修改索引#  提取表格数据到列表data = []# 读取表头(第一行)headers = [cell.text.strip() for cell in table.rows[0].cells]# 读取内容行(从第二行开始)for row in table.rows[1:]:row_data = [cell.text.strip() for cell in row.cells]data.append(row_data)权利人姓名 = data[2][2]信用代码 = data[3][4]法定代表人或者负责人 =  data[5][2]坐落 = data[15][2]不动产单元号 = data[16][2]宗地面积 = data[18][2]不动产权属证书号 = data[19][2]write_temple(权利人姓名,信用代码,法定代表人或者负责人,坐落,不动产单元号,宗地面积,不动产权属证书号)

        该函数遍历传入的 Word 文件路径列表,使用Document类打开每个 Word 文件。选择文件中的第二个表格(索引为 1),提取表头和内容行数据。从提取的数据中获取特定单元格的数据,并将这些数据作为参数传递给write_temple函数。

5. 定义写入 Excel 模板的函数

def write_temple(权利人姓名,信用代码,法定代表人或者负责人,坐落,不动产单元号,宗地面积,不动产权属证书号):data_to_write = {"E15": 权利人姓名,   # A2单元格写入权利人姓名"E29": 不动产单元号,   # A2单元格写入权利人姓名"H16": 信用代码,   # B2单元格写入信用代码"E18": 法定代表人或者负责人,  # E2单元格写入不动产单元号"E17": 坐落,                  # F2单元格写入宗地面积"E29": 不动产单元号,  # G2单元格写入不动产权属证书号"E30": 宗地面积, "E31": 不动产权属证书号, 
}# 遍历字典,将值写入对应单元格for cell_coord, value in data_to_write.items():# print(cell_coord)sheet[cell_coord] = value# 保存为新文件(避免覆盖原模板)wb.save(rf"E:\000代码测试\01office\{不动产单元号}filled_template.xlsx")

        该函数接收从 Word 文件中提取的数据,将数据整理成字典data_to_write,其中键为 Excel 单元格坐标,值为要写入的数据。通过遍历字典,将数据写入到之前选择的 Excel 工作表的对应单元格中,最后以包含不动产单元号的文件名保存修改后的 Excel 文件。

6. 主程序入口

if __name__ == "__main__":# 1. 设置要遍历的根目录(可替换为实际路径,如 "D:/我的文件夹")root_directory = r"E:\000代码测试\01office\测试文件"# 2. 设置要提取的固定文件名(如 "模板.docx"、"汇总表.xlsx" 等)target_name = "1不动产登记申请书.docx"  # 替换为你需要查找的文件名# 3. 查找目标文件result = find_target_files(root_directory, target_name)

        在主程序中,指定要遍历的根目录root_directory和要查找的目标文件名target_name,调用find_target_files函数开始执行整个流程。

三、进一步提升优化建议

        当前代码在文件不存在、读取或写入失败等情况下可能会报错并中断执行。可以添加try-except语句捕获异常,例如在load_workbook、Document等操作时捕获文件读取错误,在wb.save时捕获保存失败的错误,并进行适当的日志记录或提示。

try:wb = load_workbook(r"E:\000代码测试\01office\模板.xlsx")
except FileNotFoundError:print("Excel模板文件不存在!")# 可以添加重试逻辑或退出程序的处理

四、完整代码

import os
import pandas as pd
from docx import Document
from openpyxl import load_workbook# 加载 Excel 模板
wb = load_workbook(r"E:\000代码测试\01office\模板.xlsx")
# 选择目标工作表(如 Sheet1)
sheet = wb["1-不动产登记申请书"]def find_target_files(root_dir, target_filename):"""循环遍历文件夹(包括子文件夹),查找指定文件名的文件:param root_dir: 根目录路径:param target_filename: 要查找的固定文件名(如 "数据汇总.xlsx"):return: 找到的文件路径列表"""target_files = []# 遍历根目录下的所有文件和子文件夹for dirpath, dirnames, filenames in os.walk(root_dir):# 检查当前目录下是否有目标文件if target_filename in filenames:# 拼接完整文件路径file_path = os.path.join(dirpath, target_filename)target_files.append(file_path)read_words(target_files)
def read_words(files):for file_path in files:print(file_path)doc = Document(file_path) tables = doc.tablestable = tables[1]  # 索引从0开始,若需其他表格可修改索引#  提取表格数据到列表data = []# 读取表头(第一行)headers = [cell.text.strip() for cell in table.rows[0].cells]# 读取内容行(从第二行开始)for row in table.rows[1:]:row_data = [cell.text.strip() for cell in row.cells]data.append(row_data)权利人姓名 = data[2][2]信用代码 = data[3][4]法定代表人或者负责人 =  data[5][2]坐落 = data[15][2]不动产单元号 = data[16][2]宗地面积 = data[18][2]不动产权属证书号 = data[19][2]write_temple(权利人姓名,信用代码,法定代表人或者负责人,坐落,不动产单元号,宗地面积,不动产权属证书号)def write_temple(权利人姓名,信用代码,法定代表人或者负责人,坐落,不动产单元号,宗地面积,不动产权属证书号):data_to_write = {"E15": 权利人姓名,   # A2单元格写入权利人姓名"E29": 不动产单元号,   # A2单元格写入权利人姓名"H16": 信用代码,   # B2单元格写入信用代码"E18": 法定代表人或者负责人,  # E2单元格写入不动产单元号"E17": 坐落,                  # F2单元格写入宗地面积"E29": 不动产单元号,  # G2单元格写入不动产权属证书号"E30": 宗地面积, "E31": 不动产权属证书号, 
}# 遍历字典,将值写入对应单元格for cell_coord, value in data_to_write.items():# print(cell_coord)sheet[cell_coord] = value# 保存为新文件(避免覆盖原模板)wb.save(rf"E:\000代码测试\01office\{不动产单元号}filled_template.xlsx")if __name__ == "__main__":# 1. 设置要遍历的根目录(可替换为实际路径,如 "D:/我的文件夹")root_directory = r"E:\000代码测试\01office\测试文件"# 2. 设置要提取的固定文件名(如 "模板.docx"、"汇总表.xlsx" 等)target_name = "1不动产登记申请书.docx"  # 替换为你需要查找的文件名# 3. 查找目标文件result = find_target_files(root_directory, target_name)

http://www.dtcms.com/a/511966.html

相关文章:

  • 区块链知识总结
  • 开关电源三种拓扑资料整理
  • xss-labs pass-07
  • ES安装和简单讲解
  • Microtest的整套承包系统(turnkey system)目标电源设备特性
  • 程序员学习大模型必备:2025年“人工智能+“行业标杆案例荟萃(附下载)
  • 山西做网站的公司有哪些网站开发做前端还是后端
  • Ubuntu部署redis
  • 国内高端医疗网站建设网站搜索引擎优化诊断
  • 一次完整的 HTTP 请求经历什么步骤?
  • 清理与重装Docker的完整步骤
  • 一个浏览器多人用?Docker+Neko+cpolar实现跨网共享
  • 石灰土做击实检测网站怎么填教育培训网站源码 模板 php培训机构网站源码培训学校网站源码
  • Rust 与 Python:语法对比全景指南
  • 使用vgpu_unlock在ubuntu 22.04上解锁GTX1060 (by quqi99)
  • 北京制作网站的公司简介下载站源码cms
  • MySQL 8+ 日志管理与数据备份恢复实战指南
  • 【MySQL 数据库】MySQL用户管理
  • EXPLAIN执行计划详解
  • 【文档】配置 prometheus-webhook-dingtalk + alertmanager 细节
  • higress开通tcp和websocket网关
  • 国外优秀网站建设什么样的网站可以做外链
  • 【JavaWeb|第一篇】Maven篇
  • 如何上传网页到网站好玩网页传奇
  • 打造专属Spring Boot Starter
  • Elasticsearch面试精讲 Day 30:Elasticsearch面试真题解析与答题技巧
  • 单一key-value对象工具-org.apache.commons.lang3.tuple.Pair
  • h5游戏免费下载:3D小车车
  • 分布式事务详解
  • Flink重启策略有啥用