victory的博客

长安一片月,万户捣衣声

0%

python-docx | 向Word文档中添加图片

向Word文档中添加图片

以下代码使用python-docx向Word文档中的指定位置添加图片

# 提取Excel表中的数据
from openpyxl import load_workbook  # 用于读取Excel中的信息

wb = load_workbook('数据.xlsx')
ws = wb.active
data = []
for row in range(2, ws.max_row + 1):
    number = ws['A' + str(row)].value
    problem = ws['B' + str(row)].value
    owner = ws['C' + str(row)].value
    info_list = [number, problem, owner]
    data.append(info_list)

# print(data)

from docx import Document
from docx.shared import Cm
import os

doc = Document("6S稽查问题模板.docx")

# 将图片按修改时间排序(这样才能与图片的描述一致),将路径存入列表,以便后面逐个插入图片时调用
path = "6s_pictures"
list_p = [path + "\\" + i for i in os.listdir(path)]  # 获取图片的文件名,并拼接完整路径
list_p.sort(key=lambda path: os.path.getmtime(path))  # 将列表中的文件按其修改时间排序,os.path.getmtime() 函数是获取文件最后修改时间

table = doc.tables[0]  # 已确定是第一个表格,其索引是0

# 增加需要的行,以便足够填入数据
for i in range(len(data) - 1):
    table.add_row()

# 写入数据及图片
for row in range(1, len(data) + 1):
    table.cell(row, 0).text = str(data[row - 1][0])  # 往第1列写入序号
    table.cell(row, 1).text = data[row - 1][1]  # 往第2列写入问题描述
    table.cell(row, 3).text = data[row - 1][2]  # 往第4列写入责任部门

    # 插入图片并调整图片的高度和宽度,以适合模板中的单元格尺寸
    run = table.cell(row, 2).paragraphs[0].add_run()  # 新增一个文字块
    picture = run.add_picture(list_p[row - 1])  # 插入图片
    picture.height = Cm(4.4)  # 设置图片高度
    picture.width = Cm(6.2)  # 设置图片宽度

doc.save("6S稽查问题.docx")

6S稽查问题模板.docx
数据.xlsx
6s_pictures