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

Возможные сценарии использования

Aspose.Cells позволяет извлекать все типы объектов OLE из листа. Используйте метод Worksheet->GetOleObjects() для доступа ко всем объектам OLE внутри листа. У каждого объекта OLE есть свойства ProgID и ObjectData, которые могут помочь вам определить тип объекта OLE и успешно извлечь его.

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

Следующий образец кода загружает образец файла Excel, содержащий три объекта OLE. Код определяет типы объектов OLE и извлекает их поочередно в виде следующих файлов.

Образец кода

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-C
Aspose::Cells::Startup();
// Source directory path.
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path.
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
//Path of input excel file
U16String sampleExtractingOLEObjectsFromWorksheet = srcDir + u"sampleExtractingOLEObjectsFromWorksheet.xlsx";
// Load sample Excel file containing OLE objects.
Workbook workbook(sampleExtractingOLEObjectsFromWorksheet);
// Get the first worksheet.
Worksheet worksheet = workbook.GetWorksheets().Get(0);
// Access the count of Ole objects.
int oleCount = worksheet.GetOleObjects().GetCount();
// Iterate all the Ole objects and save to disk with correct file format extension.
for (int i = 0; i < oleCount; i++)
{
// Access Ole object.
OleObject oleObj = worksheet.GetOleObjects().Get(i);
// Access the Ole ProgID.
U16String strProgId = oleObj.GetProgID();
// Find the correct file extension.
U16String fileExt = u"";
if (strProgId == u"Document")
{
fileExt = u".docx";
}
else if (strProgId ==u"Presentation")
{
fileExt = u".pptx";
}
else if (strProgId == u"Acrobat Document")
{
fileExt = u".pdf";
}
// Find the correct file name with file extension.
U16String fileName = outDir + u"outputExtractOleObject" + fileExt;
// Write the Ole object data with correct file name.
std::ofstream fout(fileName.ToUtf8(), std::ios::binary | std::ios::out);
if (!fout.is_open()) {
std::cerr << "Failed to open the file: " << fileName.ToUtf8() << std::endl;
continue;
}
const Vector<uint8_t>& data = oleObj.GetObjectData();
fout.write(reinterpret_cast<char*>(data.GetData()), data.GetLength());
fout.close();
}//for
Aspose::Cells::Cleanup();