作品名称
基于Excel数据自动生成员工工资调整通知
用到的库
pandas、docx、datetime、os
作品简介
该实例用于读取Excel文件中的员工姓名和实发工资信息,并根据这些信息为每位员工生成一个个性化的Word文档通知。每个通知包含一个居中的标题、内容段落(从第二行开始缩进),以及右下角的日期。
实现过程
一、导入必要的库
import pandas as pd
from docx import Document
from docx.shared import Pt, Inches
from datetime import datetime
import os
二、确保输出目录存在
output_dir = "./output"
df = pd.read_excel(file_path)
四、创建Word文档模板函数(create_word_document)
添加标题:创建一个新的段落,设置为居中对齐,添加标题文本“关于工资调整通知”,并设置为加粗和14磅字体。
添加内容并设置缩进:定义一个包含多个段落内容的列表paragraphs,遍历这个列表,对于索引大于0的段落(即从第二个段落开始)应用首行缩进。
添加日期:创建一个新的段落,设置为右对齐,并添加当前日期,格式为YYYY年MM月DD日。
保存文档:使用清理后的名字或哈希值作为文件名的一部分,以避免文件系统级别的编码问题,保存生成的Word文档到指定的输出目录。
def create_word_document(name, salary):
document = Document()
# 添加标题并居中
title = document.add_paragraph()
title.alignment = 1 # 居中对齐
run = title.add_run("关于工资调整通知")
run.bold = True
run.font.size = Pt(14)
# 添加内容并设置缩进
paragraphs = [
f"尊敬的 {name}:",
f"由于公司业绩增长不错,您的工资将增加30%,调整后的实发工资为:{salary * 1.3:.2f}元。",
"并且在2025年实现全员平均20薪。",
"在这感谢您对公司发展的贡献!"
]
for i, text in enumerate(paragraphs):
paragraph = document.add_paragraph(text)
if i > 0: # 只对第二行及以后的段落进行缩进
paragraph_format = paragraph.paragraph_format
paragraph_format.first_line_indent = Inches(0.3) # 设置首行缩进两个汉字 # 添加日期
date_paragraph = document.add_paragraph()
date_paragraph.alignment = 2 # 右对齐
date_paragraph.add_run(datetime.today().strftime('%Y年%m月%d日'))
# 使用唯一标识符代替名字生成文件名,避免编码问题
sanitized_name = ''.join(c for c in name if c.isalnum() or c in ('_', '-')).strip() or str(hash(name))
document.save(os.path.join(output_dir, f"{sanitized_name}_工资调整通知.docx"))
五、遍历DataFrame,为每个人生成一个Word文档
遍历DataFrame中的每一行,提取姓名和实发工资字段。
调用create_word_document函数为每个员工生成一个Word文档。
使用try-except块捕获任何可能发生的异常,并打印错误信息,以便于调试。
for index, row in df.iterrows():
name = row['姓名']
salary = row['实发工资']
try:
create_word_document(name, salary)
except Exception as e:
print(f"Failed to process {name}: {e}")
print("所有通知已生成完毕。")
六、结语
以上就是本次分享的全部内容,如果你有任何疑问或想要分享你的自动化办公经验,我们的评论区永远为你敞开。你的每一个点赞和转发,都是对我们最大的支持和鼓励!
获取文中的完整代码,请关注公众号和小程序“众嗅博客”,并回复关键字“Python工资调整”,即可获取。
如您有自动化需求,请在评论区发出来吧!
暂无评论内容