Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
De nombreux scénarios réels obligent un développeur à découper un fichier Excel unique 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, il peut être nécessaire d’extraire un tableau ou un bloc de données particulier d’une feuille et de l’envoyer sous forme de fichier autonome par courriel, sans révéler le reste du classeur. Les classeurs consolidés de grande taille peuvent également devoir être découpés en morceaux plus petits pour faciliter la manipulation, accélérer le chargement ou permettre le traitement en aval par d’autres systèmes.
Aspose.Cells for JavaScript via C++ propose deux approches flexibles pour cette tâche. La première parcourt chaque feuille de calcul du classeur source et copie son contenu dans une toute nouvelle instance de Workbook, en enregistrant chaque instance en tant que fichier distinct. La seconde se concentre sur une plage de cellules précise au sein d’une feuille et ne copie que cette plage dans un nouveau classeur. Dans les deux cas, le flux général est identique : charger le classeur source avec la classe Workbook, accéder aux données via les objets Worksheet et Cells, transférer le contenu vers un Workbook de destination, puis enregistrer le classeur de destination sur le disque.
Dans cette approche, le classeur source est ouvert une seule fois, puis pour chaque Worksheet de sa collection Worksheets, un nouveau classeur de destination est créé. Le contenu de la feuille source est alors copié dans la première feuille du classeur de destination, et le classeur de destination est enregistré sous un nom dérivé du nom de la feuille source. Le résultat est un fichier de sortie par feuille, chaque fichier contenant les données d’une seule feuille source.
Cette méthode convient lorsque chaque feuille du classeur source représente une unité d’information logiquement indépendante (département, région, mois ou ligne de produit) et que vous souhaitez livrer ou traiter chaque unité séparément.
Les étapes suivantes décrivent comment fractionner un fichier Excel en copiant chaque feuille de calcul dans un nouveau classeur :
Workbook et en transmettant le chemin du fichier à son constructeur.Workbook.Worksheets à l’aide d’une boucle for ou for...of afin de traiter chaque Worksheet du fichier source.Workbook (un classeur vide) pour la feuille courante.Cells de la feuille source et en écrivant leurs valeurs dans les cellules correspondantes de la feuille de destination, ou en utilisant la méthode Cells.Copy pour transférer toute une plage en une seule opération.dataDir + worksheet.Name + ".xls"), de façon à ce que chaque fichier généré possède un nom unique.Workbook.Save du classeur de destination pour écrire le fichier sur le disque.<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Aspose.Cells Example</h1>
<input type="file" id="fileInput" accept=".xls" />
<button id="runExample">Run Example</button>
<div id="result"></div>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook } = AsposeCells;
const readyPromise = AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: ["arial.ttf", "NotoSansSC-Regular.ttf"]
});
document.getElementById('runExample').addEventListener('click', async () => {
const result = document.getElementById('result');
try {
const fileInput = document.getElementById('fileInput');
const file = fileInput.files[0];
if (!file) {
result.innerHTML = '<p style="color: red;">Please select an .xls file.</p>';
return;
}
result.innerHTML = '<p>Processing...</p>';
const workbook = new Workbook(new Uint8Array(await file.arrayBuffer()));
const downloadLinks = document.createElement('div');
for (let i = 0; i < workbook.worksheets.count; i++) {
const sourceSheet = workbook.worksheets.get(i);
const sheetName = sourceSheet.name;
const destWorkbook = new Workbook();
const destIndex = destWorkbook.worksheets.add();
const destSheet = destWorkbook.worksheets.get(destIndex);
destSheet.name = sheetName;
destSheet.copy(sourceSheet);
const outputData = destWorkbook.save(AsposeCells.SaveFormat.Excel97To2003);
const blob = new Blob([outputData], { type: "application/vnd.ms-excel" });
const downloadLink = document.createElement('a');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = `${sheetName}.xls`;
downloadLink.textContent = `Download ${sheetName}.xls`;
downloadLink.style.display = 'block';
downloadLink.style.marginTop = '8px';
downloadLinks.appendChild(downloadLink);
}
result.innerHTML = '<p style="color: green;">Done! Click a download link to get the result file.</p>';
result.appendChild(downloadLinks);
} catch (error) {
console.error(error);
const errorMessage = document.createElement('p');
errorMessage.style.color = 'red';
errorMessage.textContent = `Error: ${error instanceof Error ? error.message : error}`;
result.replaceChildren(errorMessage);
}
});
</script>
</body>
</html>
Le résultat attendu est un ensemble de nouveaux fichiers dans le répertoire de données, un fichier par feuille du classeur source. Chaque fichier porte le nom de la feuille correspondante et contient les données (et éventuellement la mise en forme) de cette seule feuille.
Parfois, les données à fractionner ne correspondent pas à une feuille entière, mais à une région rectangulaire précise d’une feuille, comme A1:D10 ou une plage nommée représentant un tableau particulier. Dans ces cas‑ci, copier des feuilles entières est superflu, et une approche plus précise est requise : identifier la plage source, copier uniquement cette plage dans un nouveau classeur, puis enregistrer le nouveau fichier.
Cette approche est idéale lorsque vous devez extraire un seul tableau, un bloc de rapport ou une zone de données d’une feuille plus grande tout en ignorant le contenu non pertinent. Elle est également utile pour exporter des régions sélectionnées par l’utilisateur sous forme de 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 contenant la plage à copier, soit par indice (par exemple la première feuille), soit par nom dans la collection Worksheets.A1:C10, d’une plage nommée obtenue via la collection Worksheet.Cells, ou d’une plage créée avec 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 toute la plage, ou vous pouvez parcourir les cellules de la plage source et écrire leurs valeurs dans les cellules de destination avec PutValue. Des CopyOptions optionnels peuvent être fournis pour contrôler ce qui est transféré (valeurs uniquement, valeurs et styles, formules, etc.).Workbook.Save.Le résultat attendu est un seul nouveau fichier dans le répertoire de données contenant 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 les autres données du fichier source ; il ne contient que la plage extraite, commençant à la cellule A1 de sa première feuille.
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.