添加 OLE 对象到 PowerPoint 中的好处主要包括集成多种数据类型、增强交互性和动态性、提高工作效率、保持内容更新、增强视觉效果以及简化复杂流程。这些好处使得 OLE 对象成为 PowerPoint 中一种强大且灵活的工具,有助于创建更加生动、专业且高效的演示文稿。在本文中,我们将详细介绍如何使用 Spire.Presentation for Python 在 Python 中向 PowerPoint 演示文稿插入、提取或修改 OLE 对象。
安装 Spire.Presentation for Python
本教程需要用到 Spire.Presentation for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Presentation
如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.Presentation for Python
Python 在 PowerPoint 中插入 OLE 对象
Spire.Presentation for Python 提供了 IShape.AppendOleObject() 方法,用于在 PowerPoint 演示文稿中插入 OLE 对象。详细步骤如下:
- 创建一个 Presentation 对象。
- 使用 Presentation.Slides[index] 属性获取要添加 OLE 对象的幻灯片。
- 使用 IShape.AppendOleObject() 方法向幻灯片添加 OLE 对象。
- 使用 IOleObject.SubstituteImagePictureFillFormat.Picture.EmbedImage 设置 OLE 的嵌入图片。
- 使用 IOleObject.ProgId 设置 OLE 的对象类型。
- 使用 Presentation.SaveToFile() 方法保存结果演示文稿。
- Python
from spire.presentation.common import *
from spire.presentation import *
# 创建一个新的 PowerPoint 演示文稿对象
ppt = Presentation()
slide = ppt.Slides[0]
# 从流中添加 Excel 图像
excelImageStream = Stream("excel.png")
oleImage = ppt.Images.AppendStream(excelImageStream)
excelImageStream.Close()
# 设置位置并将Excel文件添加到OLE中
excelRec = RectangleF.FromLTRB(100, 60, oleImage.Width+100, oleImage.Height+60)
oleStream = Stream("Excel文件.xlsx")
oleObject = slide.Shapes.AppendOleObject("excel", oleStream, excelRec)
oleObject.SubstituteImagePictureFillFormat.Picture.EmbedImage = oleImage
oleObject.ProgId = "Excel.Sheet.12"
# 从流中添加 Zip 图像
zipImageStream = Stream("zip.png")
zipOleImage = ppt.Images.AppendStream(zipImageStream)
zipImageStream.Close()
# 设置位置并将Zip文件添加到OLE中
zipRec = RectangleF.FromLTRB(100, oleImage.Height+100, zipOleImage.Width+100, zipOleImage.Height+oleImage.Height+100)
zipOleStream = Stream("展示PPT.zip")
zipOleObject = slide.Shapes.AppendOleObject("zipPackage", zipOleStream, zipRec)
zipOleObject.ProgId = "Package"
zipOleObject.SubstituteImagePictureFillFormat.Picture.EmbedImage = zipOleImage
# 关闭流
oleStream.Close()
zipOleStream.Close()
# 保存 PowerPoint 演示文稿
ppt.SaveToFile("添加OLE对象.pptx", FileFormat.Pptx2010)
ppt.Dispose()
Python 提取 PowerPoint 中的 OLE 对象
如果您喜欢 PowerPoint 演示文稿中嵌入的 OLE 对象,并想在其他地方使用它们,可以将它们提取出来并保存到指定的磁盘中。以下步骤详细演示了如何从 PowerPoint 中提取OLE对象:
- 创建一个 Presentation 对象。
- 使用 Presentation.LoadFromFile() 方法加载一个 PowerPoint 演示文稿。
- 遍历 PowerPoint 的所有幻灯片。
- 遍历每一张幻灯片上的所有 Shape。
- 判断 Shape 是否为 OLE 对象。
- 通过 IOleObject.ProgId 确定 OLE 对象的类型,并将 OLE 保存为对应的文档类型的文件。
- Python
from spire.presentation.common import *
from spire.presentation import *
# 设置输出文件路径
outputFile_px = "提取OLE/ExtractOLEObject.pptx"
outputFile_p = "提取OLE/ExtractOLEObject.ppt"
outputFile_xls = "提取OLE/ExtractOLEObject.xls"
outputFile_xlsx = "提取OLE/ExtractOLEObject.xlsx"
outputFile_doc = "提取OLE/ExtractOLEObject.doc"
outputFile_docx = "提取OLE/ExtractOLEObject.docx"
outputFile_zip = "提取OLE/ExtractOLEObject.zip"
# 创建 PowerPoint 演示文稿对象
presentation = Presentation()
# 加载带有 OLE 对象的 PowerPoint 演示文稿
presentation.LoadFromFile("提取Ole.pptx")
# 遍历每一页的Shape
for slide in presentation.Slides:
for shape in slide.Shapes:
# 检查Shape是否为 OLE 对象
if isinstance(shape, IOleObject):
oleObject = shape if isinstance(shape, IOleObject) else None
stream = oleObject.Data
# 根据不同的 ProgId 保存不同类型的文件
if oleObject.ProgId == "Excel.Sheet.8":
stream.Save(outputFile_xls)
elif oleObject.ProgId == "Excel.Sheet.12":
stream.Save(outputFile_xlsx)
elif oleObject.ProgId == "Word.Document.8":
stream.Save(outputFile_doc)
elif oleObject.ProgId == "Word.Document.12":
stream.Save(outputFile_docx)
elif oleObject.ProgId == "PowerPoint.Show.8":
stream.Save(outputFile_p)
elif oleObject.ProgId == "PowerPoint.Show.12":
stream.Save(outputFile_px)
elif oleObject.ProgId == "Package":
stream.Save(outputFile_zip)
stream.Dispose()
# 释放资源
presentation.Dispose()
Python 修改 PowerPoint 中 OLE 对象的数据
通过修改 PowerPoint 中 OLE 对象的数据,您可以使演示更具活力、实用性和个性化,为观众呈现更加精彩和引人入胜的演示内容。具体实现步骤如下:
- 创建一个 Presentation 对象。
- 使用 Presentation.LoadFromFile() 方法加载一个 PowerPoint 演示文稿。
- 遍历 PowerPoint 的所有幻灯片。
- 遍历每一张幻灯片上的所有 Shape。
- 判断 Shape 是否为 OLE 对象。如果是,则获取 OLE 对象的数据 IOleObject.Data。
- 通过 IOleObject.ProgId 确定 OLE 对象的类型,并新建对应文档类型的实例化对象加载获取到的 OLE 数据。
- 修改 OLE 数据后文件保存到流中,并将流数据赋值给源 OLE 数据。
- 使用 Presentation.SaveToFile() 方法保存结果演示文稿。
- Python
from spire.presentation.common import *
from spire.presentation import *
# 创建一个新的 PowerPoint 演示文稿对象
presentation = Presentation()
# 加载示例文档
presentation.LoadFromFile("示例文档.pptx")
# 遍历每一页的Shape
for slide in presentation.Slides:
for shape in slide.Shapes:
# 检查Shape是否为 OLE 对象
if isinstance(shape, IOleObject):
oleObject = shape if isinstance(shape, IOleObject) else None
stream = oleObject.Data
stream2 = Stream()
# 如果是 PowerPoint 文件对象
if oleObject.ProgId == "PowerPoint.Show.12":
# 创建一个新的 PowerPoint 对象
ppt = Presentation()
ppt.LoadFromStream(stream, FileFormat.Auto)
# 向第一页添加嵌入图像
ppt.Slides[0].Shapes.AppendEmbedImageByPath(ShapeType.Rectangle, "Logo.png", RectangleF.FromLTRB(567, 267, 657, 367))
# 保存修改后的 PowerPoint 文件到流中
ppt.SaveToFile(stream2, FileFormat.Pptx2013)
stream2.Position = 0
oleObject.Data = stream2
# 保存修改后的 PowerPoint 演示文稿
presentation.SaveToFile("修改OLE数据.pptx", FileFormat.Pptx2013)
presentation.Dispose()
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。