Microsoft Word 中的表格可以包含多种元素,包括文本、图像等等。用户可以将图像插入表格中以显示一些信息或从表格中提取图像以用于其他文档。本文将介绍如何使用 Spire.Doc for Python 在 Word 表格中插入或提取图像。
安装 Spire.Doc for Python
本教程需要使用 Spire.Doc for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Doc
如果您不确定如何安装,请参考此教程:如何在 Windows 中安装 Spire.Doc for Python
Python 在 Word 文档中将图像插入表格
Spire.Doc for Python 提供了 Table.Rows[].Cells[].Paragraphs[].AppendPicture() 方法,将图像添加到特定的表格单元格。下面是详细的步骤:
- 创建一个 Document 对象。
- 使用 Document.LoadFromFile() 方法加载 Word 文档。
- 通过 Document.Sections[].Tables[] 属性获取该部分的一个指定表。
- 使用 Table.Rows[].Cells[].Paragraphs[].AppendPicture() 方法将图像添加到单元格的特定段落。
- 通过 Picture.Width 和 Picture.Height 属性设置图像的宽度和高度。
- 使用 Document.SaveToFile() 方法保存生成的文档。
- Python
from spire.doc import *
from spire.doc.common import *
# 定义输入文件路径
inputFile = "data/表格.docx"
# 定义输出文件路径
outputFile = "output/AddPictureToTableCell.docx"
# 创建Document对象
doc = Document()
# 从输入文件中加载文档内容
doc.LoadFromFile(inputFile)
# 获取文档的第一个表格
table1 = doc.Sections[0].Tables[0]
# 在表格的第2行第3列的单元格中添加一张名为"python.png"的图片,并设置图片的宽度和高度为100
picture = table1.Rows[1].Cells[2].Paragraphs[0].AppendPicture("output/python.png")
picture.Width = 100
picture.Height = 100
# 在表格的第3行第3列的单元格中添加一张名为"net.png"的图片,并设置图片的宽度和高度为100
picture = table1.Rows[2].Cells[2].Paragraphs[0].AppendPicture("output/net.png")
picture.Width = 100
picture.Height = 100
# 在表格的第4行第3列的单元格中添加一张名为"java.png"的图片,并设置图片的宽度和高度为100
picture = table1.Rows[3].Cells[2].Paragraphs[0].AppendPicture("output/java.png")
picture.Width = 100
picture.Height = 100
# 将修改后的文档保存到输出文件中,格式为Docx
doc.SaveToFile(outputFile, FileFormat.Docx)
# 关闭文档对象
doc.Close()
Python 从 Word 文档的表格中提取出图片
从表格中提取图像,需要遍历表格中的所有行、每行中的所有单元格、每个单元格中的所有段落以及每个段落中的所有子对象,然后找到 DocPicture 类型的对象,最后将它们保存到指定的文件路径。下面是详细的步骤:
- 创建一个 Document 对象。
- 使用 Document.LoadFromFile() 方法加载 Word 文档。
- 通过 Document.Sections[].Tables[] 属性获取该部分的一个指定表。
- 遍历表的每一行。
- 遍历每一行的每个单元格。
- 遍历每个单元格的每个段落。
- 遍历每个段落的每个子对象。
- 获取到子对象后,判断子对象是否为 DocPicture 类型,如果是则赋值给 picture 类型,否则赋值为 None。
- 获取图片的字节数据。
- 将图片字节数据通过 images.append() 方法添加到图片列表中。
- 遍历图片列表,将每个图片保存到文件中。
- Python
from asyncio.windows_events import NULL
from email.mime import image
from spire.doc import *
from spire.doc.common import *
# 打开一个Word文档
doc = Document("output/AddPictureToTableCell.docx")
# 获取文档中的第一个表格
table = doc.Sections[0].Tables[0]
# 初始化图片名称和图片列表
image_name = None
images = []
# 遍历表格的每一行
for i in range(table.Rows.Count):
# 遍历每一行的每个单元格
for j in range(table.Rows[i].Cells.Count):
# 遍历每个单元格的每个段落
for p in range(table.Rows[i].Cells[j].Paragraphs.Count):
# 获取当前段落
para = table.Rows[i].Cells[j].Paragraphs.get_Item(p)
# 遍历段落的子对象
for c in range(para.ChildObjects.Count):
# 获取当前子对象
obj = para.ChildObjects.get_Item(c)
# 如果子对象是图片类型
if obj.DocumentObjectType == DocumentObjectType.Picture:
# 判断子对象是否为DocPicture类型,如果是则赋值给picture,否则赋值为None
picture = obj if isinstance(obj, DocPicture) else None
# 获取图片的字节数据
dataBytes = picture.ImageBytes
# 将图片字节数据添加到图片列表中
images.append(dataBytes)
# 遍历图片列表,将每个图片保存到文件中
for index, item in enumerate(images):
image_Name = "output/Image-{}.png".format(index)
with open(image_Name, 'wb') as imageFile:
imageFile.write(item)
# 关闭文档
doc.Close()
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。