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

01批量填写excel文档


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

一、代码功能概述​

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

二、代码分步骤详解

1. 导入必要的库

python 复制代码
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 模板

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

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

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

python 复制代码
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 文件数据的函数

python 复制代码
def read_words(files):
    for file_path in files:
        print(file_path)
        doc = Document(file_path) 
        tables = doc.tables
        table = 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 模板的函数

python 复制代码
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. 主程序入口

python 复制代码
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时捕获保存失败的错误,并进行适当的日志记录或提示。

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

四、完整代码

python 复制代码
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.tables
        table = 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)
    
相关推荐
workflower4 小时前
微软PM的来历
java·开发语言·算法·microsoft·django·结对编程
惊讶的猫4 小时前
c++基础
开发语言·c++
人间乄惊鸿客4 小时前
python — day9
开发语言·python
妮妮喔妮5 小时前
Go的垃圾回收
开发语言·后端·golang
SteveRocket8 小时前
Python机器学习与数据分析教程之pandas
python·机器学习·数据分析
向上的车轮8 小时前
无需云服务的家庭相册:OpenHarmony 上的 Rust 实践
开发语言·后端·rust
豐儀麟阁贵9 小时前
4.5数组排序算法
java·开发语言·数据结构·算法·排序算法
Jane-6667779 小时前
C语言——栈与队列
c语言·开发语言
“抚琴”的人9 小时前
C# 取消机制(CancellationTokenSource/CancellationToken)
开发语言·c#·wpf·1024程序员节·取消机制