OLE 允许用户将各种文件类型(如图像、图表、文档和多媒体)直接嵌入到 Excel 工作簿中,从而促进了信息的更加动态和全面的呈现。通过插入 OLE 对象,用户可以创建交互式和引人注目的电子表格,将各种数据格式集成到一个 Excel 环境中,以简化分析和演示过程。在本文中,我们将探讨如何使用 Spire.XLS for Python 在 Python 中插入链接或嵌入式 OLE 对象到 Excel 以及从 Excel 中提取 OLE 对象。
安装 Spire.XLS for Python
本教程需要 Spire.XLS for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.XLS
如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.XLS for Python
Python 插入链接型的 OLE 对象到 Excel
要将 OLE 对象插入工作表中,您可以使用 Worksheet.OleObjects.Add(fileName, image, linkType) 方法,其中:
- fileName 参数指定要插入的外部文件的路径,
- Image 参数指定 OLE 对象显示为的缩略图或文档图标,
- linkType 参数确定 OLE 对象是作为嵌入源还是链接源插入到文档中。
以下是使用 Spire.XLS for Python 将链接型的 OLE 对象插入到 Excel 的步骤:
- 创建一个 Workbook 对象。
- 通过 Workbook.Worksheets[index] 属性获取第一个工作表。
- 使用 Image.FromFile() 方法加载一个图像。
- 使用 Worksheet.OleObjects.Add() 方法向工作表插入 OLE 对象,并将链接类型设置为 OleLinkType.Link。
- 通过 IOleObject.Location 属性指定 OLE 对象的位置。
- 通过 IOleObject.ObjectType 属性指定 OLE 对象的类型
- 使用 Workbook.SaveToFile() 方法将工作簿保存为 Excel 文件。
- Python
from spire.xls import *
from spire.xls.common import *
# 创建 Workbook 对象
workbook = Workbook()
# 获取第一个工作表对象
sheet = workbook.Worksheets[0]
# 在单元格 A1 中设置文本内容
sheet.Range["A1"].Text = "这是一个OLE对象。"
# 从文件加载图像数据
image = Image.FromFile("image1.png")
# 使用流将图像保存为 PNG 格式并获取流对象
with Stream() as stream:
image.Save(stream, ImageFormat.get_Png())
# 在工作表中添加 OLE 对象,指定链接类型和流对象
oleObject = sheet.OleObjects.Add("Word文档.docx", stream, OleLinkType.Link)
# 设置 OLE 对象的位置为 B3 单元格
oleObject.Location = sheet.Range["B3"]
# 设置 OLE 对象的对象类型为 Word 文档
oleObject.ObjectType = OleObjectType.WordDocument
# 将更改后的工作簿保存为文件,使用 ExcelVersion.Version2016 格式
workbook.SaveToFile("Ole对象.xlsx", ExcelVersion.Version2016)
# 释放 Workbook 对象所占用的资源
workbook.Dispose()
Python 插入嵌入型的 OLE 对象到 Excel
要将嵌入型的 OLE 对象插入到 Excel 中,您可以在调用 Worksheet.OleObjects.Add() 方法时将链接类型设置为 OleLinkType.Embed。详细步骤如下:
- 创建一个 Workbook 对象。
- 通过 Workbook.Worksheets[index] 属性获取第一个工作表。
- 使用 Image.FromFile() 方法加载一个图像。
- 使用 Worksheet.OleObjects.Add() 方法向工作表插入 OLE 对象,并将链接类型设置为 OleLinkType.Embed 。
- 通过 IOleObject.Location 属性指定 OLE 对象的位置
- 通过 IOleObject.ObjectType 属性指定 OLE 对象的类型。
- 使用 Workbook.SaveToFile() 方法将工作簿保存为另一个 Excel 文件。
- Python
from spire.xls import *
from spire.xls.common import *
# 创建 Workbook 对象
workbook = Workbook()
# 获取第一个工作表对象
sheet = workbook.Worksheets[0]
# 在单元格 A1 中设置文本内容
sheet.Range["A1"].Text = "这是一个OLE对象。"
# 从文件加载图像数据
image = Image.FromFile("image2.png")
# 使用流将图像保存为 PNG 格式并获取流对象
with Stream() as stream:
image.Save(stream, ImageFormat.get_Png())
# 在工作表中添加嵌入式 OLE 对象,指定链接类型和流对象
oleObject = sheet.OleObjects.Add("Word文档.docx", stream, OleLinkType.Embed)
# 设置 OLE 对象的位置为 B3 单元格
oleObject.Location = sheet.Range["B3"]
# 设置 OLE 对象的对象类型为 Word 文档
oleObject.ObjectType = OleObjectType.WordDocument
# 将更改后的工作簿保存为文件,使用 ExcelVersion.Version2016 格式
workbook.SaveToFile("Ole对象2.xlsx", ExcelVersion.Version2016)
# 释放 Workbook 对象所占用的资源
workbook.Dispose()
Python 从 Excel 中提取 OLE 对象
Spire.XLS for Python 提供了 Worksheet.HasOleObjects 属性来确定工作表是否包含 OLE 对象。如果存在,可以通过 Worksheet.OleObjects 属性获取所有对象。然后,确定特定 OLE 对象的类型,并将 OLE 保存为适当文档类型的文件。以下是使用 Spire.XLS for Python 从 Excel 中提取 OLE 对象的步骤。
- 创建一个 Workbook 对象。
- 使用 Workbook.LoadFromFile() 方法加载一个 Excel 文件。
- 通过 Workbook.Worksheets[index] 属性获取特定的工作表。
- 通过 Worksheet.HasOleObjects 属性确定工作表是否包含 OLE 对象。
- 通过 Worksheet.OleObjects 属性从工作表获取所有 OLE 对象。
- 确定特定 OLE 对象的类型,并将 OLE 保存为适当文档类型的文件。
- Python
from spire.xls import *
from spire.xls.common import *
# 定义一个将数据写入文件的函数
def WriteAllBytes(fname:str, data):
# 打开文件以二进制写入模式
fp = open(fname, "wb")
# 遍历数据并写入文件
for d in data:
fp.write(d)
# 关闭文件
fp.close()
# 创建 Workbook 对象
workbook = Workbook()
# 加载 Excel 文件
workbook.LoadFromFile("Ole对象文档.xlsx")
# 获取第一个工作表对象
sheet = workbook.Worksheets[0]
# 检查工作表是否包含 OLE 对象
if sheet.HasOleObjects:
# 遍历工作表中的所有 OLE 对象
for obj in sheet.OleObjects:
# 获取 OLE 对象的类型
type = obj.ObjectType
# 如果对象类型是 Word 文档
if type is OleObjectType.WordDocument:
# 将 OLE 对象的数据写入 Word 文档文件
WriteAllBytes("output/Word-Extracted.docx", obj.OleData)
# 如果对象类型是 Adobe Acrobat 文档
if type is OleObjectType.AdobeAcrobatDocument:
# 将 OLE 对象的数据写入 PDF 文件
WriteAllBytes("output/PDF-Extracted.pdf", obj.OleData)
# 如果对象类型是 PowerPoint 演示文稿
if type is OleObjectType.PowerPointPresentation:
# 将 OLE 对象的数据写入 PowerPoint 文件
WriteAllBytes("output/PPT-Extracted.pptx", obj.OleData)
# 释放 Workbook 对象所占用的资源
workbook.Dispose()
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。