Python办公自动化 | 批量word生成工具2.0
Python,办公自动化,批量,word,生成,工具,2.0
2025-03-20 08:48:57 时间
两年前写过一篇python自动化的文章:
近日有粉丝表示太好用了,问能不能添加批量添加图片的功能,粉丝的需求就是我输出的动力,安排!
需求实现思路是:将图片路径也写到excel中,python读取图片路径完成批量插入。
需要说明的是python办公自动化操控word用的是 Python-docx
包,如果你还没有安装,使用pip install python-docx
命令在 cmd 命令行窗口完成安装,如果提示 pip 不是内部或者外部命令,说明 python.exe
文件路径没有添加到用户的环境变量,添加后即可识别。
首先导入需要用到的包
from docx import Document
import xlrd
from docx.shared import Inches # 设置图片尺寸,单位是英寸
from docx.shared import Cm # 设置图片尺寸,单位是厘米
from docx.enum.text import WD_ALIGN_PARAGRAPH # 设置对其方式
定义插入图片的函数:
def insert_img(headline, path, width):
myparagraphs = document.paragraphs
for paragraph in myparagraphs:
# 根据文档中的占位符定位图片插入的位置,excel首行文件就是关键字、占位符
if headline in paragraph.text:
# 把占位符去掉
paragraph.text = paragraph.text.replace(headline, '')
paragraph.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER #设置单元格内容居中对齐
run = paragraph.add_run()
# 使用传入的 width 参数配置图片的宽度
run.add_picture(path, width=Cm(width))
需要说明是的,如果将图片插入和文本替换放在一个表格内,图片相关的首行文本会被替换为图片路径,所以图片插入和文本替换的模板参数信息需要放到两个sheet中用来区分。
为了提高可移植性,本次代码使用了相对路径,你只需将所有相关文件放置在同一个文件夹下即可。
定义好函数之后,就可以开始操作了。
第一步:打开 excel 报表数据文件,其标题行即为需处理的关键字。
xlsx = xlrd.open_workbook(r'.\报告数据.xls')
table1 = xlsx.sheet_by_index(0)
table2 = xlsx.sheet_by_index(1)
内容见如下截图所示:(sheet1 和 sheet2 的行应该是一一对应的。)
第二步:循环excel中的内容行(第二行开始),每一行都会生成一个 word 文件
for table_row in range(1, table1.nrows):
第三步:编写每一次循环所执行的动作
# 打开模板文件《报告模板.docx》
document = Document(r'.\报告模板.docx')
# 将excel表格 sheet1 中的内容行替换掉标题行,其标题行即为报告模板中的关键字
for table_col in range(0, table1.ncols):
text_chenge(str(table1.cell(0, table_col).value), str(table1.cell(table_row, table_col).value))
# 批量插入图片,sheet2 标题行为关键字,内容行为图片路径和图片宽度
for table_col in range(0, table2.ncols):
insert_img(str(table2.cell(0, table_col).value), str(table2.cell(table_row, table_col).value), int(table2.cell(table_row, 2).value))
document.save(f'{str(table1.cell(table_row, 0).value)} eSRVCC切换成功率低优化报告.docx')
print("%s eSRVCC切换成功率低优化报告成功生成!" % str(table1.cell_value(table_row, 0)))
执行代码后即可批量生成 word 报告,生成多少份取决于 excel 模板文件中填写了多少行内容。
相关文章
- python的内置函数(五)、endswith()
- Python编码规范
- python 字符串转成数字_python数字转十六进制字符串
- 二级Python选择题_二级python选择题题库
- Python-drf前戏38-前端Vue
- X波段双极化相控阵天气雷达基数据的python读取方法
- 神器,轻松可视化Python程序调用流程
- 【水水水文章】用 Python 发邮件
- Python继续霸榜,SQL写得溜,面试或许能加分
- python 变量与数据类型
- 做自动化测试选择Python还是Java?
- python之抛出异常(raise语句)「建议收藏」
- Python面试基础知识_python自学需要哪些基础知识
- Python中的语法糖甜不甜?
- Easy Games With Python and Pygame(二)- Pygame 绘制图形
- python线性回归算法「建议收藏」
- Python基础13-模块的使用
- Python日志管理
- 使用python进行词频分析
- 快速了解 OJ 判题系统如何在python中使用?