Python办公自动化之批量生成文档

简介: Python办公自动化之批量生成文档

在日常工作中,类似合同一样的文档通常都会有固定的模板,如偶尔编辑一两份文档,则可以手动完成。假如同一个模板有一百份或更多文档需要生成呢?如果手工逐个文档的编辑保存,不仅容易出错,还是一项费力不讨好的工作;如果能够根据模板批量生成文档,则会大大提高工作效率,减少出错的几率。本文以一个简单的小例子,简述如何通过Python批量生成文档,仅供学习分享使用,如有不足之处,还请指正。

涉及知识点

  • xlrd模块,用于Excel文档的读取,其中xldate_as_tuple,主要用于Excel读取时的日期格式处理。
  • python-docx 模块,用于word文档的相关操作。

场景介绍

现有一份简化的合同模板,其中红色箭头所指的地方,均是需要替换的地方,如下所示:

同时有21名员工入职,需要签署这份合同,如下所示:

本文的功能就是根据模板文档,为21名员工,分别生成合同文档。

核心代码

1. 读取数据

读取Excel的数据,并返回数据列表,将此功能封装成单独的函数,如下所示:

def read_data(filename: str = None):
    """
    读取Excel文件内容
    :param fileName:
    :return:
    """
    datas = []
    work_book = xlrd.open_workbook(filename=filename)
    sheet = work_book.sheet_by_index(0)
    for i in range(1, sheet.nrows):
        # 日期格式转换
        birthday = xldate_as_tuple(sheet.cell_value(i, 6), 0)
        birthday2 = '%(year)d-%(month)d-%(day)d' % {'year': birthday[0], 'month': birthday[1], 'day': birthday[2]}
        bpdate = xldate_as_tuple(sheet.cell_value(i, 15), 0)
        bpdate2 = '%(year)d-%(month)d-%(day)d' % {'year': bpdate[0], 'month': bpdate[1], 'day': bpdate[2]}
        data = {
            'bpCompanyName': sheet.cell_value(i, 0),
            'bpAddress': sheet.cell_value(i, 1),
            'bpBoss': sheet.cell_value(i, 2),
            'bpManager': sheet.cell_value(i, 3),
            'bpWorker': sheet.cell_value(i, 4),
            'bpSex': sheet.cell_value(i, 5),
            'bpBirthday': birthday2,
            'bpHomeAddress': sheet.cell_value(i, 7),
            'bpId': sheet.cell_value(i, 8),
            'bpBeginYear': int(sheet.cell_value(i, 9)),  # 整数格式处理
            'bpBeginMonth': int(sheet.cell_value(i, 10)),  # 整数格式处理
            'bpBeginDay': int(sheet.cell_value(i, 11)),  # 整数格式处理
            'bpEndYear': int(sheet.cell_value(i, 12)),  # 整数格式处理
            'bpEndMonth': int(sheet.cell_value(i, 13)),  # 整数格式处理
            'bpEndDay': int(sheet.cell_value(i, 14)),  # 整数格式处理
            'bpDate': bpdate2,
            'bpSigner': sheet.cell_value(i, 16)
        }
        datas.append(data)
    return datas

2. 单个合同文档生成

Excel的每一行代表一名员工,生成一份合同文档【遍历每一个段落,以及每一个段落的文本,逐个替换文本中的变量内容,且保持原有的格式不变】,如下所示:

def write_docx(data, template):
    """
    生成文档
    :param data:
    :return:
    """
    doc = Document(docx=template)
    paragraphs = doc.paragraphs
    for paragraph in paragraphs:
        for run in paragraph.runs:
            for key in data.keys():
                run_text = run.text.replace(key, str(data[key]))
                run.text = run_text
    doc.save('合同/%s合同.docx' % data['bpWorker'])

3. 批量文档生成

遍历所有的员工信息,逐一生成文档,如下所示:

def batch_write_docx(datas, template):
    """
    批量操作
    :param datas:
    :return:
    """
    for data in datas:
        write_docx(data, template)

4. 综合运用

将以上方法依次调用,就可以生成全部文档,如下所示:

excel_file = '合同数据.xls'
template = '合同模板.docx'
datas = read_data(excel_file)
# print(datas)
batch_write_docx(datas, template)
print('done')

5. 示例完整代码

示例完整代码链接

示例截图

批量文档生成后,截图如下所示:

合同文档内文,如下所示:

以上就是批量生成文档的全部内容,可以看出,生成后的文档,格式与模板保持一致。

备注

书愤五首·其一

【作者】陆游 【朝代】宋

早岁那知世事艰,中原北望气如山。

楼船夜雪瓜洲渡,铁马秋风大散(sǎn)关。

塞上长城空自许,镜中衰鬓已先斑。

出师一表真名世,千载谁堪伯仲间。

相关文章
|
2月前
|
Web App开发 存储 前端开发
Python+Selenium自动化爬取携程动态加载游记
Python+Selenium自动化爬取携程动态加载游记
|
2月前
|
数据采集 人工智能 API
推荐一款Python开源的AI自动化工具:Browser Use
Browser Use 是一款基于 Python 的开源 AI 自动化工具,融合大型语言模型与浏览器自动化技术,支持网页导航、数据抓取、智能决策等操作,适用于测试、爬虫、信息提取等多种场景。
576 5
推荐一款Python开源的AI自动化工具:Browser Use
|
2月前
|
Python
Python 办公实战:用 python-docx 自动生成 Word 文档
本文详解如何使用 python-docx 库实现 Word 文档自动化生成,涵盖环境搭建、文档创建、格式设置、表格与图片处理、模板填充、批量生成及性能优化等实战技巧,助你高效完成办公场景中的文档自动化任务。
693 1
|
2月前
|
数据采集 存储 监控
Python爬虫自动化:定时监控快手热门话题
Python爬虫自动化:定时监控快手热门话题
|
2月前
|
Web App开发 人工智能 数据可视化
猫头虎 推荐:国产开源AI工具 爱派(AiPy)|支持本地部署、自动化操作本地文件的AI办公神器
爱派(AiPy)是一款国产开源AI工具,支持本地部署与自动化操作,助力数据处理与办公效率提升。基于Python Use理念,AiPy让AI直接控制本地文件,简化繁琐任务,提供高效智能的解决方案,适用于数据工程师、分析师及日常办公用户。
829 0
|
2月前
|
安全 数据库 数据安全/隐私保护
Python办公自动化实战:手把手教你打造智能邮件发送工具
本文介绍如何使用Python的smtplib和email库构建智能邮件系统,支持图文混排、多附件及多收件人邮件自动发送。通过实战案例与代码详解,帮助读者快速实现办公场景中的邮件自动化需求。
227 0
|
2月前
|
前端开发 安全 Java
办公自动化必修课:用Python打造PDF全能处理工具
在职场中,PDF处理常令人崩溃:拆分、合并、加密等问题严重影响效率。本文教你用Python打造一个包含拆分、合并、加密、水印四大功能的PDF工具箱,通过实战代码提升办公自动化水平,让文档操作像拼乐高一样简单高效。
115 0
|
4月前
|
数据采集 存储 前端开发
Python爬虫自动化:批量抓取网页中的A链接
Python爬虫自动化:批量抓取网页中的A链接
|
3月前
|
测试技术 Python
Python接口自动化测试中Mock服务的实施。
总结一下,Mock服务在接口自动化测试中的应用,可以让我们拥有更高的灵活度。而Python的 `unittest.mock`库为我们提供强大的支持。只要我们正确使用Mock服务,那么在任何情况下,无论是接口是否可用,都可以进行准确有效的测试。这样,就大大提高了自动化测试的稳定性和可靠性。
149 0
|
2月前
|
运维 监控 安全
从实践到自动化:现代运维管理的转型与挑战
本文探讨了现代运维管理从传统人工模式向自动化转型的必要性与路径,分析了传统运维的痛点,如效率低、响应慢、依赖经验等问题,并介绍了自动化运维在提升效率、降低成本、增强系统稳定性与安全性方面的优势。结合技术工具与实践案例,文章展示了企业如何通过自动化实现运维升级,推动数字化转型,提升业务竞争力。

推荐镜像

更多