Extracción de objetos OLE de la hoja de cálculo

Escenarios de uso posibles

Aspose.Cells le permite extraer todo tipo de objetos OLE de la hoja de cálculo. Utilice el método Worksheet->GetOleObjects() para acceder a todos los objetos OLE dentro de la hoja de cálculo. Cada objeto OLE tiene las propiedades ProgID y ObjectData que pueden ayudarle a identificar el tipo de objeto OLE y extraerlo con éxito.

Extracción de objetos OLE de la hoja de cálculo

El siguiente código de ejemplo carga el archivo de Excel de ejemplo que tiene tres objetos OLE. El código identifica los tipos de objetos OLE y los extrae uno por uno como los siguientes archivos.

Código de muestra

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