前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python办公自动化 | 批量word生成工具2.0

Python办公自动化 | 批量word生成工具2.0

作者头像
披头
发布2022-08-22 10:43:12
1.4K0
发布2022-08-22 10:43:12
举报
文章被收录于专栏:datartisandatartisan

两年前写过一篇python自动化的文章:

Python办公自动化 | 批量word报告生成工具

近日有粉丝表示太好用了,问能不能添加批量添加图片的功能,粉丝的需求就是我输出的动力,安排!

需求实现思路是:将图片路径也写到excel中,python读取图片路径完成批量插入。

需要说明的是python办公自动化操控word用的是 Python-docx 包,如果你还没有安装,使用pip install python-docx 命令在 cmd 命令行窗口完成安装,如果提示 pip 不是内部或者外部命令,说明 python.exe 文件路径没有添加到用户的环境变量,添加后即可识别。

首先导入需要用到的包

代码语言:javascript
复制
from docx import Document
import xlrd
from docx.shared import Inches # 设置图片尺寸,单位是英寸
from docx.shared import Cm     # 设置图片尺寸,单位是厘米
from docx.enum.text import WD_ALIGN_PARAGRAPH # 设置对其方式

定义插入图片的函数:

代码语言:javascript
复制
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 报表数据文件,其标题行即为需处理的关键字。

代码语言:javascript
复制
xlsx = xlrd.open_workbook(r'.\报告数据.xls')
table1 = xlsx.sheet_by_index(0)
table2 = xlsx.sheet_by_index(1)

内容见如下截图所示:(sheet1 和 sheet2 的行应该是一一对应的。)

第二步:循环excel中的内容行(第二行开始),每一行都会生成一个 word 文件

代码语言:javascript
复制
for table_row in range(1, table1.nrows):

第三步:编写每一次循环所执行的动作

代码语言:javascript
复制
    # 打开模板文件《报告模板.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 模板文件中填写了多少行内容。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学探究 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档