Filtrer les objets lors de la chargement du classeur ou de la feuille de calcul avec C++
Scénarios d’utilisation possibles
Veuillez utiliser la propriété LoadOptions.GetLoadFilter() lors du filtrage des données du classeur. Mais si vous souhaitez filtrer les données de feuilles individuelles, vous devrez redéfinir la méthode LoadFilter.StartSheet. Veuillez fournir une valeur appropriée à partir de l’énumération LoadDataFilterOptions lors de la création ou de la manipulation de LoadFilter.
L’énumération LoadDataFilterOptions possède les valeurs possibles suivantes.
- Tous
- Paramètres du classeur
- Cellule vide
- Cellule booléenne
- Données de la cellule
- Erreur de la cellule
- Numérique de la cellule
- Chaîne de la cellule
- Valeur de la cellule
- Chart
- Formatage conditionnel
- Validation des données
- Noms définis
- Propriétés du document
- Formule
- Liens hypertexte
- Zone de fusion
- Tableau croisé dynamique
- Paramètres
- Forme
- Données de feuille
- Paramètres de feuille
- Structure
- Style
- Tableau
- VBA
- XmlMap
Filtrer les objets lors du chargement du classeur
Le code d’exemple suivant illustre comment filtrer les graphiques du classeur. Veuillez vérifier le fichier Excel exemple utilisé dans ce code et le PDF de sortie généré par celui-ci. Comme vous pouvez le voir dans le PDF de sortie, tous les graphiques ont été filtrés du classeur.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Filter charts from the workbook
LoadOptions lOptions;
lOptions.SetLoadFilter(new LoadFilter(LoadDataFilterOptions::All & ~LoadDataFilterOptions::Chart));
// Load the workbook with the above filter
U16String inputFilePath = srcDir + u"sampleFilterCharts.xlsx";
Workbook workbook(inputFilePath, lOptions);
// Save worksheet to a single PDF page
PdfSaveOptions pOptions;
pOptions.SetOnePagePerSheet(true);
// Save the workbook in PDF format
U16String outputFilePath = outDir + u"sampleFilterCharts.pdf";
workbook.Save(outputFilePath, pOptions);
std::cout << "Workbook saved successfully with filtered charts!" << std::endl;
Aspose::Cells::Cleanup();
}
Filtrer les objets lors du chargement de la feuille de calcul
Le code d’exemple suivant charge le fichier Excel source et filtre les données suivantes de ses feuilles de calcul en utilisant un filtre personnalisé.
- Il filtre les graphiques de la feuille de calcul nommée NoCharts.
- Il filtre les formes de la feuille de calcul nommée NoShapes.
- Il filtre la mise en forme conditionnelle de la feuille de calcul nommée NoConditionalFormatting.
Une fois, il charge le fichier Excel source avec un filtre personnalisé, il prend les images de toutes les feuilles de calcul une par une. Voici les images de sortie pour votre référence. Comme vous pouvez le voir, la première image n’a pas de graphiques, la deuxième image n’a pas de formes et la troisième image n’a pas de mise en forme conditionnelle.
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
class CustomLoadFilter : public LoadFilter
{
public:
void StartSheet(Worksheet& sheet) override
{
U16String sheetName = sheet.GetName();
if (sheetName == u"NoCharts")
{
// Load everything and filter charts
SetLoadDataFilterOptions(static_cast<LoadDataFilterOptions>(static_cast<int>(LoadDataFilterOptions::All) & ~static_cast<int>(LoadDataFilterOptions::Chart)));
}
if (sheetName == u"NoShapes")
{
// Load everything and filter shapes
SetLoadDataFilterOptions(static_cast<LoadDataFilterOptions>(static_cast<int>(LoadDataFilterOptions::All) & ~static_cast<int>(LoadDataFilterOptions::Drawing)));
}
if (sheetName == u"NoConditionalFormatting")
{
// Load everything and filter conditional formatting
SetLoadDataFilterOptions(static_cast<LoadDataFilterOptions>(static_cast<int>(LoadDataFilterOptions::All) & ~static_cast<int>(LoadDataFilterOptions::ConditionalFormatting)));
}
}
};
// Add main function to serve as entry point
int main() {
Aspose::Cells::Startup();
Aspose::Cells::Cleanup();
return 0;
}
Voici comment utiliser la classe CustomLoadFilter en fonction des noms des feuilles de calcul.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
class CustomLoadFilter : public LoadFilter
{
public:
CustomLoadFilter() : LoadFilter(LoadDataFilterOptions::All) {}
};
int main()
{
Aspose::Cells::Startup();
// Source directory
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Filter worksheets using CustomLoadFilter class
LoadOptions loadOpts;
CustomLoadFilter customLoadFilter;
loadOpts.SetLoadFilter(&customLoadFilter);
// Load the workbook with filter defined in CustomLoadFilter class
Workbook workbook(srcDir + u"sampleCustomFilteringPerWorksheet.xlsx", loadOpts);
// Take the image of all worksheets one by one
WorksheetCollection sheets = workbook.GetWorksheets();
for (int i = 0; i < sheets.GetCount(); i++)
{
// Access worksheet at index i
Worksheet worksheet = sheets.Get(i);
// Create an instance of ImageOrPrintOptions
// Render entire worksheet to image
ImageOrPrintOptions imageOpts;
imageOpts.SetOnePagePerSheet(true);
imageOpts.SetImageType(Aspose::Cells::Drawing::ImageType::Png);
// Convert worksheet to image
SheetRender render(worksheet, imageOpts);
render.ToImage(0, outDir + u"outputCustomFilteringPerWorksheet_" + worksheet.GetName() + u".png");
}
Aspose::Cells::Cleanup();
return 0;
}