Управление OLE-объектами

Вступление

OLE (связывание и внедрение объектов) — это структура Microsoft для технологии составных документов. Вкратце, составной документ — это что-то вроде рабочего стола дисплея, который может содержать визуальные и информационные объекты всех видов: текст, календари, анимацию, звук, движущееся видео, 3D, постоянно обновляемые новости, элементы управления и т. д. Каждый объект рабочего стола является независимым программным объектом, который может взаимодействовать с пользователем, а также взаимодействовать с другими объектами на рабочем столе.

OLE (связывание и внедрение объектов) поддерживается многими различными программами и используется для того, чтобы содержимое, созданное в одной программе, было доступно в другой. Например, вы можете вставить документ Word Microsoft в Excel Microsoft. Чтобы узнать, какие типы содержимого можно вставлять, нажмитеОбъект наВставлять меню. В списке отображаются только программы, установленные на компьютере и поддерживающие объекты OLE.Тип объекта коробка.

Вставка объектов OLE в рабочий лист

Aspose.Cells поддерживает добавление, извлечение и управление объектами OLE на листах. По этой причине Aspose.Cells имеетОлеобжектколлекшнкласс, используемый для добавления нового объекта OLE в список коллекций. Другой класс,ОлеОбъект, представляет объект OLE. В него входят несколько важных членов:

  • Данные изображенияуказывает данные изображения (значка) типа байтового массива. Изображение будет отображаться, чтобы показать объект OLE на листе.
  • ObjectDataзадает данные объекта в виде массива байтов. Эти данные будут показаны в соответствующей программе при двойном щелчке по значку объекта OLE.

В следующем примере показано, как добавить объект OLE на лист.

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

Извлечение объектов OLE в книге

В следующем примере показано, как извлечь объекты OLE в книге. В примере извлекаются разные объекты OLE из существующего файла XLS и сохраняются разные файлы (DOC, XLS, PPT, PDF и т. д.) в зависимости от типа формата файла объекта OLE.

Вот скриншот файла шаблона XLS, в нем есть разные объекты OLE, встроенные в первый рабочий лист.

Файл шаблона содержит четыре объекта OLE.

дело:изображение_альтернативный_текст

После запуска кода мы можем сохранять разные файлы на основе соответствующих типов формата OLE-объектов. Ниже приведены скриншоты некоторых созданных файлов.

Извлеченный файл XLS

дело:изображение_альтернативный_текст

Извлеченный файл PPT

дело:изображение_альтернативный_текст

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

Извлечение встроенного файла MOL

Aspose.Cells поддерживает извлечение объектов необычных типов, таких как MOL (файл молекулярных данных, содержащий информацию об атомах и связях). Следующий фрагмент кода демонстрирует извлечение встроенного файла MOL и его сохранение на диск с помощью этогообразец эксель файла.

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

Предварительные темы