多种方式实现Word文档自动插入图片

  • 1、引言
  • 2、代码示例
  • 2.1 安装
  • 2.2 实例
  • 2.2.1 Demo1
  • 2.2.2 Demo2
  • 3、总结


1、引言

小屌丝:鱼哥,帮个忙。

小鱼:双十一购买啥了?

小屌丝:别打岔。

小鱼:你说啥?

小屌丝:大宝剑。

小鱼:这个可以, 正好天冷了, 出去放松放松。

小屌丝:… 你这是选择性的听不清啊。

小鱼:也不是,自动过滤。

小屌丝:帮个忙,完事去spa。

小鱼:这个可以,你说吧

小屌丝:就是把图片自动插入Word文档里面。

小鱼:就这!

python如何在word的表格中插入图片_开发语言

小屌丝:还是足疗的动力大。
小鱼:唉,别这么说,我就是想单纯的分享点知识。
小屌丝:… 你说的都对。

2、代码示例

为了提升一些难度, 我们把图片插入Word文档,每行展示4个图片,

2.1 安装

这里我们用到三方库docx,PIL库
老规矩,第一步 安装

pip install python-docx pillow

其它安装方式,直接看这两篇:

Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!
Python3:我低调的只用一行代码,就导入Python所有库!

安装完成,就可以写代码了。

2.2 实例

2.2.1 Demo1

# -*- coding:utf-8 -*-
# @Time   : 2023-11-08
# @Author : Carl_DJ

'''
实现功能:
	图片自动插入Word文档,
	每行插入4张图片
'''
from docx import Document  
from docx.shared import Inches  
from PIL import Image  
import io  
import random  
  
# 创建一个新的Word文档对象  
doc = Document()  
  
# 图片文件夹路径  
img_folder = "./data/images"  
  
# 获取文件夹中的所有图片文件  
img_files = [f for f in os.listdir(img_folder) if f.endswith(".png") or f.endswith(".jpg")]  
  
# 每行应插入的图片数量  
img_per_line = 4  
  
# 总图片数不够一行也要插入  
if len(img_files) < img_per_line:  
    img_per_line = len(img_files)  
  
# 随机选择图片并插入到文档中  
for i in range(0, len(img_files), img_per_line):  
    images = [Image.open(os.path.join(img_folder, f)) for f in img_files[i:i + img_per_line]]  
    widths, heights = zip(*(i.size for i in images))  
    total_width = sum(widths)  
    max_height = max(heights)  
    new_img = Image.new('RGB', (total_width, max_height), color = 'white')  
    x_offset = 0  
    for img in images:          
        new_img.paste(img, (x_offset,0))  
        x_offset += img.width  
    new_img_io = io.BytesIO()      
    new_img.save(new_img_io, format='PNG')   
    image = doc.add_picture(new_img_io, width=Inches(1.0)) # 你也可以设置图片的高度和宽度,这里设置为1英寸宽  
    doc.add_paragraph().add_run().add_picture(image) # 在新的一行添加图片  
      
# 保存文档  
doc.save("output.docx")

2.2.2 Demo2

# -*- coding:utf-8 -*-
# @Time   : 2023-11-08
# @Author : Carl_DJ

'''
实现功能:
	图片自动插入Word文档,
	每行插入4张图片
'''
from docx import Document
from PIL import Image
import os

# 创建一个新的Word文档
doc = Document()

# 获取图像目录中的所有文件名
image_dir = "./data/images"  
images = [f for f in os.listdir(image_dir) if os.path.isfile(os.path.join(image_dir, f))]

# 将每个图像插入到文档中
row_num = 0
col_num = 0
for i, image_name in enumerate(images):
    # 打开图像
    img = Image.open(os.path.join(image_dir, image_name))
    
    # 将图像转换为BytesIO对象
    byte_arr = io.BytesIO()
    img.save(byte_arr, format='PNG')
    byte_arr.seek(0)
    
    # 插入图像
    run = doc.add_run()
    inline_shape = run.add_picture(byte_arr, width=Cm(2), height=Cm(2))
    
    col_num += 1
    
    # 如果当前行已经满了(即插入了4张图片),则开始新的一行
    if col_num == 4:
        row_num += 1
        col_num = 0
        
# 保存文档
doc.save('output.docx')

3、总结

Demo1和Demo2 各有千秋,
Demo2写法更简洁,更直观。
其实在平时工作中,并不需要特别复杂的代码逻辑即可实现的功能,那一定不要写的太花哨,否则,后期的维护, 其他同学接手你的代码,确实很痛苦。

当然, 参数化,还是有必要的。
今天的分享就到这里。
每天掌握一个自动化小技巧,提升工作效率,省下的时间去SPA,是香的哦。

python如何在word的表格中插入图片_开发语言_02