Gestión de objetos OLE

Introducción

OLE (Vinculación e incrustación de objetos) es el marco de trabajo de Microsoft para una tecnología de documentos compuestos. Brevemente, un documento compuesto es algo así como un escritorio de visualización que puede contener objetos visuales y de información de todo tipo: texto, calendarios, animaciones, sonido, video en movimiento, 3D, noticias continuamente actualizadas, controles, etc. 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 (Vinculación e incrustación de objetos) es compatible con muchos programas diferentes y se utiliza para hacer que el contenido creado en un programa esté disponible en otro. Por ejemplo, puede insertar un documento de Word Microsoft en Excel Microsoft. Para ver qué tipos de contenido puede insertar, haga clic enObjeto sobre elInsertar menú. Solo los programas que están instalados en la computadora y que admiten objetos OLE aparecen en elTipo de objeto caja.

Insertar objetos OLE en una hoja de trabajo

Aspose.Cells admite agregar, extraer y manipular objetos OLE en hojas de trabajo. Por esta razón, Aspose.Cells tiene laOleObjectCollectionOleObjectCollectionclase, utilizada para agregar un nuevo objeto OLE a la lista de recopilación. Otra clase,Objeto OLE, representa un objeto OLE. Tiene algunos miembros importantes:

  • Datos de imagenespecifica los datos de la imagen (icono) del tipo de matriz de bytes. La imagen se mostrará para mostrar el objeto OLE en la hoja de trabajo.
  • ObjetoDatosespecifica los datos del objeto en forma de matriz de bytes. Estos datos se mostrarán en su programa relacionado cuando haga doble clic en el icono Objeto OLE.

El siguiente ejemplo muestra cómo agregar un objeto OLE a una hoja de trabajo.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(InsertingOLEObjects.class);
// Get the image file.
File file = new File(dataDir + "logo.jpg");
// Get the picture into the streams.
byte[] img = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(img);
// Get the excel file into the streams.
file = new File(dataDir + "Book1.xls");
byte[] data = new byte[(int) file.length()];
fis = new FileInputStream(file);
fis.read(data);
// Instantiate a new Workbook.
Workbook wb = new Workbook();
// Get the first worksheet.
Worksheet sheet = wb.getWorksheets().get(0);
// Add an Ole object into the worksheet with the image shown in MS Excel.
int oleObjIndex = sheet.getOleObjects().add(14, 3, 200, 220, img);
OleObject oleObj = sheet.getOleObjects().get(oleObjIndex);
// Set embedded ole object data.
oleObj.setObjectData(data);
// Save the excel file
wb.save(dataDir + "tstoleobjects.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.) según el tipo de formato de archivo del objeto OLE.

Aquí está la captura de pantalla del archivo de plantilla XLS, tiene diferentes objetos OLE incrustados en la primera hoja de trabajo.

El archivo de plantilla contiene cuatro objetos OLE

todo:imagen_alternativa_texto

Después de ejecutar el código, podemos guardar diferentes archivos en función de sus respectivos tipos de formato de objetos OLE. Las siguientes son capturas de pantalla de algunos de los archivos creados.

El archivo XLS extraído

todo:imagen_alternativa_texto

El archivo PPT extraído

todo:imagen_alternativa_texto

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(ExtractingOLEObjects.class);
// Instantiating a Workbook object
Workbook workbook = new Workbook(dataDir + "book1.xls");
// Get the OleObject Collection in the first worksheet.
OleObjectCollection oles = workbook.getWorksheets().get(0).getOleObjects();
// Loop through all the ole objects and extract each object. in the worksheet.
for (int i = 0; i < oles.getCount(); i++) {
if (oles.get(i).getMsoDrawingType() == MsoDrawingType.OLE_OBJECT) {
OleObject ole = (OleObject) oles.get(i);
// Specify the output filename.
String fileName = dataDir + "tempBook1ole" + i + ".";
// Specify each file format based on the oleformattype.
switch (ole.getFileFormatType()) {
case FileFormatType.DOC:
fileName += "doc";
break;
case FileFormatType.EXCEL_97_TO_2003:
fileName += "Xls";
break;
case FileFormatType.PPT:
fileName += "Ppt";
break;
case FileFormatType.PDF:
fileName += "Pdf";
break;
case FileFormatType.UNKNOWN:
fileName += "Jpg";
break;
default:
fileName += "data";
break;
}
FileOutputStream fos = new FileOutputStream(fileName);
byte[] data = ole.getObjectData();
fos.write(data);
fos.close();
}
}

Extracción de archivos MOL integrados

Aspose.Cells admite la extracción de objetos de tipos poco comunes como MOL (archivo de datos moleculares que contiene información sobre átomos y enlaces). El siguiente fragmento de código muestra cómo extraer un archivo MOL incrustado y guardarlo en el disco usando esteejemplo de archivo de Excel.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the directories.
String sourceDir = Utils.Get_SourceDirectory();
String outputDir = Utils.Get_OutputDirectory();
Workbook workbook = new Workbook(sourceDir + "EmbeddedMolSample.xlsx");
int index = 1;
for (Object obj : workbook.getWorksheets())
{
Worksheet sheet = (Worksheet)obj;
OleObjectCollection oles = sheet.getOleObjects();
for (Object obj2 : oles)
{
OleObject ole = (OleObject)obj2;
String fileName = outputDir + "OleObject" + index + ".mol ";
FileOutputStream fos = new FileOutputStream(fileName);
fos.write(ole.getObjectData());
fos.flush();
fos.close();
index++;
}
}

Temas avanzados