Gestion des objets OLE

Introduction

OLE (Object Linking and Embedding) est le cadre de Microsoft pour une technologie de document composé. En bref, un document composé est quelque chose comme un bureau d’affichage qui peut contenir des objets visuels et d’information de toutes sortes : texte, calendriers, animations, son, vidéo en mouvement, 3D, actualités continuellement mises à jour, contrôles, etc. Chaque objet de bureau est une entité de programme indépendante qui peut interagir avec un utilisateur et communiquer avec d’autres objets sur le bureau.

OLE (Object Linking and Embedding) est pris en charge par de nombreux programmes différents et est utilisé pour rendre le contenu créé dans un programme disponible dans un autre. Par exemple, vous pouvez insérer un document Microsoft Word dans Microsoft Excel. Pour voir quels types de contenus vous pouvez insérer, cliquez sur Objet dans le menu Insérer. Seuls les programmes installés sur l’ordinateur et prenant en charge les objets OLE apparaissent dans la zone Type d’objet.

Insertion d’objets OLE dans une feuille de calcul

Aspose.Cells prend en charge l’ajout, l’extraction et la manipulation d’objets OLE dans les feuilles de calcul. Pour cette raison, Aspose.Cells a la classe OleObjectCollection, utilisée pour ajouter un nouvel objet OLE à la liste de collection. Une autre classe, OleObject, représente un objet OLE. Elle possède certains membres importants :

  • ImageData spécifie les données d’image (icône) de type tableau d’octets. L’image sera affichée pour montrer l’objet OLE dans la feuille de calcul.
  • ObjectData spécifie les données d’objet sous forme de tableau d’octets. Ces données seront affichées dans leur programme associé lorsque vous double-cliquez sur l’icône de l’objet OLE.

L’exemple suivant montre comment ajouter un objet OLE dans une feuille de calcul.

// 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");

Extraction d’objets OLE dans le classeur

L’exemple suivant montre comment extraire des objets OLE dans un classeur. L’exemple récupère différents objets OLE à partir d’un fichier XLS existant et enregistre différents fichiers (DOC, XLS, PPT, PDF, etc.) en fonction du type de format de fichier de l’objet OLE.

Voici la capture d’écran du fichier XLS modèle, il contient différents objets OLE intégrés dans la première feuille de calcul.

Le fichier modèle contient quatre objets OLE

todo:image_alt_text

Après avoir exécuté le code, nous pouvons enregistrer différents fichiers en fonction de leurs types de format d’objet OLE respectifs. Les captures d’écran suivantes montrent certains des fichiers créés.

Le fichier XLS extrait

todo:image_alt_text

Le fichier PPT extrait

todo:image_alt_text

// 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();
}
}

Extraction des fichiers MOL intégrés

Aspose.Cells prend en charge l’extraction d’objets de types inhabituels comme le MOL (fichier de données moléculaires contenant des informations sur les atomes et les liaisons). L’extrait de code suivant montre comment extraire un fichier MOL intégré et l’enregistrer sur disque en utilisant ce fichier Excel d’exemple.

// 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++;
}
}

Sujets avancés