# 自动批量生成合同 **Repository Path**: DLjun/automated-contract-generation ## Basic Information - **Project Name**: 自动批量生成合同 - **Description**: 自动读取表格模板,通过格式化符号替换数据表格的关键信息并生成合同信息 - **Primary Language**: Python - **License**: GPL-2.0 - **Default Branch**: default - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-02-28 - **Last Updated**: 2025-02-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 这段Python代码的主要功能是自动批量生成合同文件。它从一个Excel文件中读取合同数据,然后根据一个模板文件生成多个合同文件,每个合同文件对应一个合同编号。下面是对代码的详细解析: 概括性总结 导入必要的库:代码首先导入了处理Excel文件、正则表达式、文件操作、日志记录和日期时间处理的库。 定义辅助函数:包括格式化时间、将阿拉伯数字转换为中文大写金额、加载数据、生成合同文件、替换占位符等函数。 主流程:从指定的Excel文件中加载数据,根据模板生成合同文件,并将生成的文件保存到指定的输出目录。 异常处理:在主流程执行时捕获任何异常,并在程序结束前打印错误信息。 详细解析 导入库和设置日志: import openpyxl, re, os from collections import defaultdict from typing import Dict, List, Tuple import logging from datetime import datetime import time logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) 这部分代码导入了所需的库,并设置了日志记录的基本配置。 格式化时间函数: def 格式化时间(value): return value.strftime("%Y-%m-%d") if isinstance(value, datetime) else value 这个函数用于将日期时间对象格式化为“YYYY-MM-DD”字符串格式,如果不是日期时间对象则直接返回原值。 将阿拉伯数字转换为中文大写金额的函数: def a2c(a: float) -> str: ... 这个函数将浮点数转换为中文大写金额格式,处理了负数、小数点后两位的四舍五入以及大数值的单位转换。 加载数据函数: def 加载数据(文件路径: str, sheet_name: str = "数据内容") -> Tuple[List[str], Dict[str, List[List]]]: ... 这个函数从指定的Excel文件中读取数据,按合同编号分组,并对某些列的数据进行格式化处理。 生成合同文件函数: def 生成合同文件(合同编号: str, 数据列表: List[List], headers: List[str], 模板路径: str, 输出目录: str) -> None: ... 这个函数根据模板文件生成合同文件,计算总数量、总金额、不含税金额和税额,并替换模板中的占位符。 替换占位符函数: def 替换占位符(text: str, replacements: dict) -> str: ... 这个函数用于替换文本中的占位符,使用提供的替换字典进行替换。 替换内容函数: def 替换内容(合同内容文件: str, 模板文件: str, 输出目录: str) -> None: ... 这个函数是主流程的一部分,负责清空输出目录,加载数据,并调用生成合同文件的函数。 主程序入口和异常处理: if __name__ == "__main__": 替换内容("./批量生成合同内容.xlsx", "./模板/合同模版.xlsx", "./output_files") except Exception as e: print(e) print("3秒后自动关闭....") time.sleep(1) print("2秒后自动关闭....") time.sleep(1) print("1秒后自动关闭....") time.sleep(1) 这部分代码是程序的入口,调用替换内容函数执行主流程,并在出现异常时打印错误信息。最后,程序会在3秒后自动关闭。