Gestión de objetos OLE

Introducción

OLE (Object Linking and Embedding) es el marco de Microsoft para una tecnología de documento compuesto. En resumen, un documento compuesto es algo similar a un escritorio de visualización que puede contener objetos visuales e informativos de todo tipo: texto, calendarios, animaciones, sonido, video en movimiento, 3D, noticias actualizadas continuamente, controles, y mucho más. Cada objeto de escritorio es una entidad de programa independiente que puede interactuar con un usuario y también comunicarse con otros objetos en el escritorio.

OLE (Object Linking and Embedding) es compatible con muchos programas diferentes y se utiliza para hacer que el contenido creado en un programa esté disponible en otro. Por ejemplo, puedes insertar un documento de Microsoft Word en Microsoft Excel. Para ver qué tipos de contenido puedes insertar, haz clic en Objeto en el menú Insertar. Solo aparecen en el cuadro Tipo de objeto los programas instalados en el equipo y que admiten objetos OLE.

Inserción de objetos OLE en la hoja de cálculo

Aspose.Cells para Python via .NET soporta añadir, extraer y manipular objetos OLE en hojas de cálculo. Por ello, Aspose.Cells para Python via .NET tiene la clase OleObjectCollection, utilizada para agregar un nuevo objeto OLE a la lista de colección. Otra clase, OleObject, representa un objeto OLE. Tiene algunos miembros importantes:

  • La propiedad image_data especifica los datos de imagen (icono) de tipo matriz de bytes. La imagen se mostrará para mostrar el objeto OLE en la hoja de cálculo.
  • La propiedad object_data especifica los datos del objeto en forma de matriz de bytes. Estos datos se mostrarán en su programa relacionado cuando hagas doble clic en el ícono del objeto OLE.

El siguiente ejemplo muestra cómo agregar un objeto(s) OLE a una hoja de cálculo.

from aspose.cells import Workbook
from os import os, path
import bytearray
# For complete examples and data files, please go to https:# github.com/aspose-cells/Aspose.Cells-for-.NET
# The path to the documents directory.
dataDir = RunExamples.GetDataDir(".")
# Create directory if it is not already present.
IsExists = path.isdir(dataDir)
if notIsExists:
os.makedirs(dataDir)
# Instantiate a new Workbook.
workbook = Workbook()
# Get the first worksheet.
sheet = workbook.worksheets[0]
# Define a string variable to store the image path.
ImageUrl = dataDir + "logo.jpg"
# Get the picture into the streams.
fs = open(ImageUrl, "rb")
# Define a byte array.
imageData = bytearray(utils.filesize(fs))
# Obtain the picture into the array of bytes from streams.
fs.readinto(imageData)
# Close the stream.
fs.close()
# Get an excel file path in a variable.
path = dataDir + "book1.xls"
# Get the file into the streams.
fs = open(path, "rb")
# Define an array of bytes.
objectData = bytearray(utils.filesize(fs))
# Store the file from streams.
fs.readinto(objectData)
# Close the stream.
fs.close()
# Add an Ole object into the worksheet with the image
# Shown in MS Excel.
sheet.ole_objects.add(14, 3, 200, 220, imageData)
# Set embedded ole object data.
sheet.ole_objects[0].object_data = objectData
# Save the excel file
workbook.save(dataDir + "output.out.xls")

Extracción de objetos OLE en el libro de trabajo

El siguiente ejemplo muestra cómo extraer objetos OLE en un libro de trabajo. El ejemplo obtiene diferentes objetos OLE de un archivo XLS existente y guarda diferentes archivos (DOC, XLS, PPT, PDF, etc.) basándose en el tipo de formato de archivo del objeto OLE.

Después de ejecutar el código, podemos guardar diferentes archivos basados en sus respectivos tipos de formato de objetos OLE.

from aspose.cells import FileFormatType, Workbook
from io import BytesIO
# For complete examples and data files, please go to https:# github.com/aspose-cells/Aspose.Cells-for-.NET
# The path to the documents directory.
dataDir = RunExamples.GetDataDir(".")
# Open the template file.
workbook = Workbook(dataDir + "book1.xls")
# Get the OleObject Collection in the first worksheet.
oles = workbook.worksheets[0].ole_objects
# Loop through all the oleobjects and extract each object.
# In the worksheet.
for i in range(len(oles)):
ole = oles[i]
# Specify the output filename.
fileName = dataDir + "ole_" + str(i) + "."
# Specify each file format based on the oleobject format type.
if ole.file_format_type == FileFormatType.DOC:
fileName = "doc"
elif ole.file_format_type == FileFormatType.XLSX:
fileName = "Xlsx"
elif ole.file_format_type == FileFormatType.PPT:
fileName = "Ppt"
elif ole.file_format_type == FileFormatType.PDF:
fileName = "Pdf"
elif ole.file_format_type == FileFormatType.UNKNOWN:
fileName = "Jpg"
# Save the oleobject as a new excel file if the object type is xls.
if ole.file_format_type == FileFormatType.XLSX:
ms = BytesIO()
ms.write(ole.object_data)
oleBook = Workbook(ms)
oleBook.settings.is_hidden = False
oleBook.save(dataDir + "Excel_File" + str(i) + ".out.xlsx")
else:
fs = open(fileName, "wb")
fs.write(ole.object_data)
fs.close()

Extrayendo archivo MOL incrustado

Aspose.Cells para Python via .NET admite extraer objetos de tipos poco comunes como MOL (archivo de datos molecular que contiene información sobre átomos y enlaces). El siguiente fragmento de código demuestra cómo extraer un archivo MOL incrustado y guardarlo en disco usando este archivo de Excel de ejemplo.

from aspose.cells import Workbook
# For complete examples and data files, please go to https:# github.com/aspose-cells/Aspose.Cells-for-.NET
# directories
SourceDir = RunExamples.Get_SourceDirectory()
outputDir = RunExamples.Get_OutputDirectory()
workbook = Workbook(SourceDir + "EmbeddedMolSample.xlsx")
index = 1
for sheet in workbook.worksheets:
oles = sheet.ole_objects
for ole in oles:
fileName = outputDir + "OleObject" + str(index) + ".mol "
fs = open(fileName, "wb")
fs.write(ole.object_data)
fs.close()
index
index = index + 1

Temas avanzados