Управление 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++; | |
} | |
} |