Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Il existe de nombreux scénarios concrets dans lesquels un développeur doit diviser un seul fichier Excel en plusieurs fichiers plus petits. Par exemple, un classeur peut contenir une feuille de calcul par département, et chaque responsable de département doit recevoir uniquement sa propre feuille. Dans d’autres cas, vous pouvez souhaiter extraire un tableau particulier ou un bloc de données d’une feuille de calcul et l’envoyer comme fichier autonome par e-mail, sans exposer le reste du classeur. Les grands classeurs consolidés peuvent également devoir être divisés en morceaux plus petits pour faciliter leur manipulation, accélérer le chargement ou permettre un traitement en aval par d’autres systèmes.
Aspose.Cells propose deux approches flexibles pour cette tâche. La première approche parcourt chaque feuille de calcul du classeur source et copie son contenu dans une toute nouvelle instance de Workbook, en enregistrant chacune d’elles comme un fichier séparé. La deuxième approche se concentre sur une plage de cellules spécifique dans une feuille de calcul et copie uniquement cette plage dans un nouveau classeur. Dans les deux cas, le flux général est le même : charger le classeur source à l’aide de la classe Workbook, accéder aux données pertinentes via les objets Worksheet et Cells, transférer le contenu vers un Workbook de destination, puis enregistrer la destination sur le disque.
Dans cette approche, le classeur source est ouvert une seule fois, puis pour chaque Worksheet dans sa collection Worksheets, un nouveau Workbook de destination est créé. Le contenu de la feuille de calcul source est ensuite copié dans la première feuille de calcul du classeur de destination, et le classeur de destination est enregistré comme un fichier dont le nom est dérivé du nom de la feuille de calcul source. Le résultat est un fichier de sortie par feuille de calcul, chaque fichier de sortie contenant les données d’une seule feuille source.
Cette méthode est le bon choix lorsque chaque feuille de calcul de votre classeur source représente une unité d’information logiquement indépendante (comme un département, une région, un mois ou une ligne de produits) et que vous souhaitez livrer ou traiter chaque unité individuellement.
Les étapes suivantes décrivent comment fractionner un fichier Excel en copiant chaque feuille de calcul dans un nouveau classeur :
Workbook et en passant le chemin du fichier à son constructeur.Workbook.Worksheets à l’aide d’une boucle for ou foreach afin que chaque Worksheet du fichier source soit traité.Workbook de destination (un classeur vide) pour la feuille de calcul en cours.Worksheet au classeur de destination (ou utilisez la première feuille de calcul par défaut) et attribuez-lui un nom significatif, idéalement identique à la propriété Name de la feuille de calcul source.Cells de la feuille de calcul source et en écrivant leurs valeurs dans les cellules correspondantes de la feuille de calcul de destination, ou en utilisant la méthode Cells.Copy pour transférer une plage entière en une seule fois.dataDir + worksheet.Name + ".xls") afin que chaque fichier généré ait un nom unique.Workbook.Save du classeur de destination pour écrire le fichier sur le disque.using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
std::string dataDir = "data/";
Workbook wb(U16String((dataDir + "book1.xls").c_str()));
int sheetCount = wb.GetWorksheets().GetCount();
for (int i = 0; i < sheetCount; ++i) {
Worksheet sourceSheet = wb.GetWorksheets().Get(i);
U16String sheetName = sourceSheet.GetName();
Workbook destWorkbook;
int destIndex = destWorkbook.GetWorksheets().Add();
Worksheet destSheet = destWorkbook.GetWorksheets().Get(destIndex);
destSheet.SetName(sheetName);
destSheet.Copy(sourceSheet);
std::string destFile = dataDir + sheetName.ToUtf8() + ".xls";
destWorkbook.Save(U16String(destFile.c_str()), SaveFormat::Excel97To2003);
}
Aspose::Cells::Cleanup();
return 0;
}
Le résultat attendu est un ensemble de nouveaux fichiers dans le répertoire de données, un fichier par feuille de calcul du classeur source. Chaque fichier est nommé d’après sa feuille source correspondante, et le fichier contient les données (et éventuellement la mise en forme) de cette seule feuille.
Parfois, les données que vous devez fractionner ne correspondent pas à une feuille de calcul entière, mais plutôt à une région rectangulaire spécifique d’une feuille de calcul, telle que A1:D10 ou une plage nommée qui représente un tableau particulier. Dans ces cas, copier des feuilles de calcul entières est inutile, et une approche plus précise est requise : identifier la plage source, copier uniquement cette plage dans un nouveau classeur, et enregistrer le nouveau fichier.
Cette approche est idéale lorsque vous souhaitez extraire un seul tableau, bloc de rapport ou zone de données d’une feuille de calcul plus grande tout en éliminant tout contenu non lié. Elle est également utile pour exporter des régions sélectionnées par l’utilisateur d’une feuille comme fichiers autonomes.
Les étapes suivantes décrivent comment fractionner un fichier Excel en copiant une plage spécifique dans un nouveau classeur :
Workbook avec le chemin du fichier.Worksheet cible qui contient la plage que vous souhaitez copier, soit par index (par exemple, la première feuille), soit par nom à partir de la collection Worksheets.A1:C10, ou d’une plage nommée obtenue via la collection Worksheet.Cells, ou d’une plage créée via Worksheet.Cells.CreateRange.Workbook de destination.Worksheet du classeur de destination (la feuille par défaut).A1. La méthode Cells.Copy de la collection Cells de destination peut être utilisée pour copier une plage entière, ou vous pouvez parcourir les cellules de la plage source et écrire leurs valeurs dans les cellules de destination avec PutValue. Des CopyOptions facultatives peuvent être fournies pour contrôler ce qui est transféré (valeurs uniquement, valeurs et styles, formules, etc.).Workbook.Save.using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
// Définir le répertoire de données et les chemins de fichiers
std::string dataDir = "data/";
std::string sourcePath = dataDir + "book1.xls";
std::string outputPath = dataDir + "outputrange.xls";
// Ouvrir le fichier Excel source
Workbook sourceWorkbook(U16String(sourcePath.c_str()));
// Obtenir la première feuille de calcul du classeur source
Worksheet sourceWorksheet = sourceWorkbook.GetWorksheets().Get(0);
// Définir la plage de cellules source A1:C10 (10 lignes, 3 colonnes commençant à la ligne 0, colonne 0)
Range sourceRange = sourceWorksheet.GetCells().CreateRange(0, 0, 10, 3);
// Créer un nouveau classeur de destination
Workbook destWorkbook;
// Accéder à la première feuille de calcul du classeur de destination
Worksheet destWorksheet = destWorkbook.GetWorksheets().Get(0);
// Créer la plage de destination à A1 avec les mêmes dimensions que la plage source
Range destRange = destWorksheet.GetCells().CreateRange(0, 0, 10, 3);
// Copier la plage source vers la plage de destination
destRange.Copy(sourceRange);
// Enregistrer le classeur de destination dans un nouveau fichier .xls
destWorkbook.Save(U16String(outputPath.c_str()), SaveFormat::Excel97To2003);
Aspose::Cells::Cleanup();
return 0;
}
Le résultat attendu est un seul nouveau fichier dans le répertoire de données qui contient uniquement les valeurs (et éventuellement la mise en forme) de la plage spécifiée extraite du classeur source. Le fichier de destination n’a aucune relation avec d’autres données du fichier source ; il contient uniquement la plage extraite, commençant à la cellule A1 de sa première feuille de calcul.
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.