Extracting OLE Objects from Worksheet
Possible Usage Scenarios
Aspose.Cells allows you to extract all types of OLE objects from the worksheet. Please use Worksheet->GetOleObjects() method to access all the OLE objects inside the worksheet. Each OLE object has ProgID and ObjectData properties that can help you identify the type of OLE object and extract it successfully.
Extracting OLE Objects from Worksheet
The following sample code loads the sample Excel file which has three OLE objects. The code identifies the types of OLE objects and extracts them one by one as the following files.
Sample Code
// 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(); |