# 怎么用Python+Excel+Word制作百份合同 ## 前言 在现代办公场景中,批量生成合同是行政、法务、销售等岗位的常见需求。传统手动复制粘贴的方式不仅效率低下,还容易出错。本文将详细介绍如何通过Python自动化操作Excel和Word,实现高效、准确的百份合同批量生成。 --- ## 一、技术方案概述 ### 1.1 工具组合优势 - **Python**:自动化处理核心引擎 - **Excel**:结构化存储变量数据(客户信息、金额、日期等) - **Word**:合同模板载体,支持格式保留 ### 1.2 实现原理 ```mermaid graph TD A[Excel数据源] --> B(Python处理) C[Word模板] --> B B --> D[批量生成合同]
pip install python-docx openpyxl pandas
/contract_project │── /templates │ └── contract_template.docx │── /data │ └── client_data.xlsx └── batch_contract.py
{{client_name}}
、{{sign_date}}
)《技术服务合同》 甲方:{{company_name}} 乙方:{{client_name}} 第一条 合同金额为人民币{{amount}}元(大写:{{amount_cn}})... 【以下为签字页】 签署日期:{{sign_date}}
client_id | client_name | company_name | amount | amount_cn | sign_date |
---|---|---|---|---|---|
001 | 张三科技 | 示例有限公司 | 50000 | 伍万元整 | 2023-08-15 |
import pandas as pd def validate_data(df): # 检查必填字段 required_cols = ['client_name', 'amount'] assert all(col in df.columns for col in required_cols) # 金额有效性检查 assert df['amount'].dtype == 'int64'
from docx import Document def replace_text(doc, old_text, new_text): for p in doc.paragraphs: if old_text in p.text: p.text = p.text.replace(old_text, new_text) # 处理表格中的变量 for table in doc.tables: for row in table.rows: for cell in row.cells: if old_text in cell.text: cell.text = cell.text.replace(old_text, new_text)
import os from datetime import datetime def generate_contracts(): # 读取数据 df = pd.read_excel('./data/client_data.xlsx') # 创建输出目录 output_dir = f'contracts_{datetime.now().strftime("%Y%m%d")}' os.makedirs(output_dir, exist_ok=True) # 批量生成 for _, row in df.iterrows(): doc = Document('./templates/contract_template.docx') # 动态替换所有变量 for col in df.columns: replace_text(doc, f'{{{{{col}}}}}', str(row[col])) # 保存文件 filename = f"{output_dir}/{row['client_id']}_{row['client_name']}_合同.docx" doc.save(filename)
import cn2an def convert_amount(amount): try: return cn2an.an2cn(str(amount)) except: return str(amount)
def generate_contract_no(client_id): date_str = datetime.now().strftime("%Y%m%d") return f"CON-{date_str}-{client_id:03d}"
from docx2pdf import convert def convert_to_pdf(docx_path): convert(docx_path, docx_path.replace('.docx', '.pdf'))
try: generate_contracts() except FileNotFoundError as e: print(f"文件路径错误: {e}") except PermissionError: print("请关闭正在使用的Word文档") except Exception as e: print(f"未知错误: {e}") # 记录详细日志 with open('error.log', 'a') as f: f.write(f"{datetime.now()}: {str(e)}\n")
python-docx-template
替代标准库from concurrent.futures import ThreadPoolExecutor with ThreadPoolExecutor(max_workers=4) as executor: executor.map(process_single_contract, df.iterrows())
special_terms
列def add_signature(doc, img_path): doc.add_picture(img_path, width=Inches(2.5))
(因篇幅限制,此处展示核心结构,完整代码需包含以下模块) 1. 配置加载模块 2. 日志记录模块 3. 邮件自动发送模块 4. 进度显示功能
# config.py class Config: TEMPLATE_PATH = "./templates/contract_template.docx" DATA_FILE = "./data/clients.xlsx" OUTPUT_DIR = "./output_contracts"
通过本文介绍的方法,原本需要数天手工操作的百份合同生成工作,现在仅需10分钟左右即可完成。这种自动化方案不仅大幅提升效率,还能实现: 1. 100%准确率(避免人工复制错误) 2. 格式统一规范 3. 可追溯的生成记录
下一步改进方向: - 集成电子签章系统 - 开发Web操作界面 - 增加区块链存证功能
Q:如何处理合并单元格中的变量?
A:建议在模板中拆分为独立单元格
Q:生成的文档出现乱码怎么办?
A:检查Excel和Word的编码格式(推荐UTF-8)
python-docx
官方文档”`
(注:实际执行时需根据具体需求调整代码,建议先在测试环境验证。全文共计约4150字,包含代码示例、流程图和实用技巧)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。