读取excel和word模板,然后批量生成word

hpy 357 2022-11-29

项目介绍

我朋友要批量写一堆《告知用户函》,他们有word模板,但是里面的数据是从内部系统中导出来的excel。
问我能不能实现这个需求,我第一反应想到的是office的邮件合并,但是还是略显麻烦,所以自己动手用python做了一个。

这个项目有两个版本,一个是python封装为exe,一个是在线web。
image-1669712121744
image-1669797624697

打包的exe,由于依赖问题,会出各种各样的bug,后来又改为了web形式。
我们先来看看线上版的。
地址:https://treeworld.com.cn/doc_batch/

效果展示与使用说明

  1. 上传excel
  2. 上传word模板
  3. 根据模板,及excel中的数据,批量生成word
  4. 压缩并下载

场景

  • 邀请函
  • 工资条
  • 告知用户书啥的

开发流程

好了,我们来看一下怎么实现的。
项目分为前后端,前端就是简单的html,没用到vue之类的。
先说前端,其实就是怎么读取文件、发送,我用了一个叫fileinput的库,他可以读取文件,校验拓展名。
https://github.com/kartik-v/bootstrap-fileinput/
后端因为之前用的python-docx做的文档转换,所以干脆就用flask提供web服务。

整体目录

├─outputFileFolder - 存转化好的word (定时删除)
├─receiveFileFolder - 存接收的文件
├─zipFileFolder - 存压缩文件
├─core.py - 核心业务逻辑
├─server.py - flask
└─web
  ├─css
  ├─js
  ├index.html  - 前端页面


暴露三个接口

  1. 接收上传的文件;
  2. 开始生成
  3. 提供压缩文件的下载

流程

  1. 接收文件
  2. 逐行读取excel readExcel()
  3. 搜索word模板的关键词,替换
  4. 批量生成
  5. 压缩文件夹

主要讲一下怎么搜索与替换 {数字}这个过程吧。
在python-docx这个库里,doc文档分为 paragraghy和table