Управление 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-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
// Create directory if it is not already present.
bool IsExists = System.IO.Directory.Exists(dataDir);
if (!IsExists)
System.IO.Directory.CreateDirectory(dataDir);
// Instantiate a new Workbook.
Workbook workbook = new Workbook();
// Get the first worksheet.
Worksheet sheet = workbook.Worksheets[0];
// Define a string variable to store the image path.
string ImageUrl = dataDir + "logo.jpg";
// Get the picture into the streams.
FileStream fs = File.OpenRead(ImageUrl);
// Define a byte array.
byte[] imageData = new Byte[fs.Length];
// Obtain the picture into the array of bytes from streams.
fs.Read(imageData, 0, imageData.Length);
// Close the stream.
fs.Close();
// Get an excel file path in a variable.
string path = dataDir + "book1.xls";
// Get the file into the streams.
fs = File.OpenRead(path);
// Define an array of bytes.
byte[] objectData = new Byte[fs.Length];
// Store the file from streams.
fs.Read(objectData, 0, objectData.Length);
// Close the stream.
fs.Close();
// Add an Ole object into the worksheet with the image
// Shown in MS Excel.
sheet.OleObjects.Add(14, 3, 200, 220, imageData);
// Set embedded ole object data.
sheet.OleObjects[0].ObjectData = objectData;
// Save the excel file
workbook.Save(dataDir + "output.out.xls");

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

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

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

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
// Open the template file.
Workbook workbook = new Workbook(dataDir + "book1.xls");
// Get the OleObject Collection in the first worksheet.
Aspose.Cells.Drawing.OleObjectCollection oles = workbook.Worksheets[0].OleObjects;
// Loop through all the oleobjects and extract each object.
// In the worksheet.
for (int i = 0; i < oles.Count; i++)
{
Aspose.Cells.Drawing.OleObject ole = oles[i];
// Specify the output filename.
string fileName = dataDir + "ole_" + i + ".";
// Specify each file format based on the oleobject format type.
switch (ole.FileFormatType)
{
case FileFormatType.Doc:
fileName += "doc";
break;
case FileFormatType.Xlsx:
fileName += "Xlsx";
break;
case FileFormatType.Ppt:
fileName += "Ppt";
break;
case FileFormatType.Pdf:
fileName += "Pdf";
break;
case FileFormatType.Unknown:
fileName += "Jpg";
break;
default:
//........
break;
}
// Save the oleobject as a new excel file if the object type is xls.
if (ole.FileFormatType == FileFormatType.Xlsx)
{
MemoryStream ms = new MemoryStream();
ms.Write(ole.ObjectData, 0, ole.ObjectData.Length);
Workbook oleBook = new Workbook(ms);
oleBook.Settings.IsHidden = false;
oleBook.Save(dataDir + "Excel_File" + i + ".out.xlsx");
}
// Create the files based on the oleobject format types.
else
{
FileStream fs = File.Create(fileName);
fs.Write(ole.ObjectData, 0, ole.ObjectData.Length);
fs.Close();
}
}

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

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

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
//directories
string SourceDir = RunExamples.Get_SourceDirectory();
string outputDir = RunExamples.Get_OutputDirectory();
Workbook workbook = new Workbook(SourceDir + "EmbeddedMolSample.xlsx");
var index = 1;
foreach (Worksheet sheet in workbook.Worksheets)
{
OleObjectCollection oles = sheet.OleObjects;
foreach (var ole in oles)
{
string fileName = outputDir + "OleObject" + index + ".mol ";
FileStream fs = File.Create(fileName);
fs.Write(ole.ObjectData, 0, ole.ObjectData.Length);
fs.Close();
index++;
}
}

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