您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 怎么用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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。