Plongée en profondeur : modèles avancés avec l’API de gestion Aspose.Cells Cloud
Vous savez comment créer un classeur, renommer une feuille et compresser un fichier. Mais
ManagementControllerpossède des outils plus pointus cachés à la vue — un vidage JSON complet de la structure d’un classeur, l’inspection des cellules fusionnées, l’acceptation des révisions, et le modèle de création basé sur des templates qui transforme le style en une préoccupation d’une seule ligne. C’est là que l’entretien cesse d’être “cliquer partout dans Excel” et devient une hygiène de classeur programmatique.
Dans Part 1 nous avons couvert les 15 points de terminaison avec des guides clairs. Cet article est destiné aux situations qui posent réellement problème en production :
- Vous devez auditer un classeur avant de le traiter — possède-t-il des tableaux croisés dynamiques, des graphiques, des zones fusionnées qui pourraient bloquer votre code ?
- Vous devez accepter les modifications suivies sur des centaines de fichiers avant qu’ils n’atteignent votre pipeline d’archivage.
- Vous voulez mettre en place un système de modèles où différents locataires obtiennent des sorties personnalisées sans écrire de code de style.
- Vous devez examiner les zones de cellules fusionnées pour éviter d’écrire des données dedans (ou pour comprendre la disposition d’un classeur que vous n’avez pas créé).
- Vous voulez enchaîner créer → structurer → modifier → compresser en une seule fabrique de classeur.
Chaque exemple ci-dessous est exécutable. Le code est en cURL ; les mêmes appels correspondent 1:1 aux SDK .NET, Python et Java.
1. Obtenir la structure complète d’un classeur au format JSON
PUT /v4.0/cells/spreadsheet/structure (local) et GET /v4.0/cells/{name}/structure (remote) renvoient un document JSON unique qui décrit tout ce que le moteur sait sur le classeur : feuilles de calcul, tableaux, tableaux croisés dynamiques, graphiques, formes, zones de cellules fusionnées, et plus.
Local
curl -X PUT "https://api.aspose.cloud/v4.0/cells/spreadsheet/structure" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: multipart/form-data" \
-F "file=@mystery_workbook.xlsx"
À distance
curl -X GET "https://api.aspose.cloud/v4.0/cells/mystery_workbook.xlsx/structure?folder=uploads" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Ce que vous obtenez
{
"FileName": "mystery_workbook.xlsx",
"FileFormat": "Xlsx",
"Worksheets": [
{
"Name": "Sheet1",
"Type": "Worksheet",
"Tables": [{ "Name": "SalesData", "Range": "A1:D120" }],
"PivotTables": [{ "Name": "Pivot1", "Range": "F1:H20" }],
"Charts": [{ "Name": "Chart1", "Type": "Column" }],
"MergedCells": [
{ "StartRow": 0, "StartColumn": 0, "EndRow": 0, "EndColumn": 3 }
]
}
]
}
Pourquoi cela est important
- Validation pré‑vol. Avant d’exécuter les importations
DataProcessingControllersur un classeur, appelezstructurepour vérifier que la feuille de calcul cible et le tableau existent réellement. - Découverte de la mise en page. Vous travaillez avec un classeur que vous n’avez pas créé ?
structurevous indique exactement ce qu’il contient sans le télécharger ni fouiller dans Excel. - Rendu de l’interface utilisateur. Alimentez un sélecteur de feuille de calcul / tableau / graphique dans votre application directement à partir de la réponse
structure.
2. Inspection des régions de cellules fusionnées
Les cellules fusionnées sont les tueurs silencieux de l’automatisation des feuilles de calcul — écrire dans une région fusionnée peut écraser silencieusement toute la zone ou générer des erreurs cryptiques. ManagementController expose deux points de terminaison pour les interroger.
Feuille de calcul locale
curl -X PUT "https://api.aspose.cloud/v4.0/cells/spreadsheet/mergedcells?worksheet=Sheet1" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-F "file=@my_workbook.xlsx"
Feuille de calcul distante
curl -X GET "https://api.aspose.cloud/v4.0/cells/my_workbook.xlsx/worksheets/Sheet1/mergedcells?folder=uploads" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Réponse
[
{ "StartRow": 0, "StartColumn": 0, "EndRow": 0, "EndColumn": 3 },
{ "StartRow": 5, "StartColumn": 1, "EndRow": 7, "EndColumn": 1 }
]
Chaque entrée est un CellArea — un rectangle dans les coordonnées de ligne/colonne. La première région ci‑dessus est un en‑tête fusionné de A1 à D1 ; la seconde est une fusion verticale dans B6 à B8.
Utilisez-le pour éviter les mines terrestres
Avant d’écrire des données dans une feuille de calcul (via l’importation du CellsController ou du DataProcessingController), appelez ce point de terminaison et filtrez toutes les valeurs startcell qui se trouvent à l’intérieur d’une zone fusionnée. Ou, à l’inverse, utilisez les régions fusionnées pour découvrir les lignes d’en‑tête et les titres de section de manière programmatique.
3. Accepter les modifications suivies (révisions)
Lorsque les collaborateurs activent le “Track Changes” dans Excel, chaque modification devient une révision — un changement en attente avec l’auteur, l’horodatage et l’état accepter/refuser. Si votre pipeline ingère de tels fichiers et a besoin de versions propres et finalisées, vous avez deux options :
- Local:
PUT /v4.0/cells/spreadsheet/accept-all-revisions - Distant:
PUT /v4.0/cells/{name}/accept-all-revisions
Local
curl -X PUT "https://api.aspose.cloud/v4.0/cells/spreadsheet/accept-all-revisions" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-F "file=@collaborative_draft.xlsx" \
--output finalized.xlsx
À distance
curl -X PUT "https://api.aspose.cloud/v4.0/cells/collaborative_draft.xlsx/accept-all-revisions?folder=drafts" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
--output finalized.xlsx
Après cet appel, le document n’affiche plus les marques de modifications suivies. Toutes les modifications sont intégrées comme si elles avaient été saisies directement dans la version finale.
Flux de travail en masse
Combinez avec les API de listage de fichiers de votre fournisseur de stockage pour traiter chaque fichier d’un dossier :
for name in $(list_files_in drafts/); do
curl -X PUT "https://api.aspose.cloud/v4.0/cells/$name/accept-all-revisions?folder=drafts" \
-H "Authorization: Bearer $TOKEN"
done
(Le code de production réel utiliserait le SDK et paralléliserait avec async/await — l’appel REST est identique.)
4. Création guidée par modèle à grande échelle
Le paramètre template sur spreadsheet/create est plus qu’une commodité — c’est la base d’un système de templating. Le serveur charge le classeur modèle, copie son thème, ses styles, ses plages nommées et toutes les tables préformatées, puis renvoie un nouveau classeur que vous pouvez immédiatement hydrater avec des données via DataProcessingController/import/data.
Modèle : un modèle par locataire
Stockez les modèles dans le stockage cloud sous un chemin indexé par le locataire :
templates/tenant_acme/invoice.xlsx
templates/tenant_globex/invoice.xlsx
templates/tenant_initech/invoice.xlsx
Lorsque le système d’un locataire génère une facture :
# 1) Create from tenant template
curl -X PUT "https://api.aspose.cloud/v4.0/cells/spreadsheet/create\
?format=xlsx\
&template=templates/tenant_acme/invoice.xlsx" \
-H "Authorization: Bearer $TOKEN" \
--output blank_acme.xlsx
# 2) Hydrate with this invoice's line items
curl -X PUT "https://api.aspose.cloud/v4.0/cells/import/data/json\
?worksheet=Items\
&startcell=A10\
&insert=true" \
-H "Authorization: Bearer $TOKEN" \
-F "file=@blank_acme.xlsx" \
-F "file=@line_items.json" \
--output invoice_ACME_2026_09_001.xlsx
Chaque locataire obtient une sortie pixel-perfect dans sa propre marque — zéro logique de style dans votre code.
Modèle : usine de rapports
Un travail nocturne doit produire 30 rapports régionaux, tous avec la même mise en page mais des données différentes :
for region in north south east west ...; do
create(template=regional_template.xlsx) |
import(data=region_$region.csv, worksheet=Data, startcell=A2) |
compress(level=6) |
save("reports/2026/09/$region.xlsx")
done
Chaque étape du pipeline correspond à un appel d’API. L’ensemble de la chaîne s’insère dans une boucle shell.
5. Compresser avec intention
PUT /v4.0/cells/spreadsheet/compress?level=N accepte n’importe quel niveau de 0 à 9. Choisir le bon niveau est une petite décision qui a des effets en aval.
| Level | Cas d’utilisation typique |
|---|---|
| 0 | Débogage — sortie du classeur sans aucune compression |
| 1–3 | Pipelines quasi temps réel où le coût du CPU prime sur la taille |
| 4–6 | Recommandation par défaut. Bonne compression pour un CPU modeste. |
| 7–9 | Archivage, pièces jointes d’email, livrables — la taille prime sur la vitesse |
Une compression de niveau 6 sur un fichier XLSX de 30 MB aboutit généralement à environ 8–12 MB. Le niveau 9 permet souvent de réduire encore de 10–15 %, pour un coût CPU approximativement doublé. Pour la plupart des applications, level=6 est le meilleur compromis.
6. Réparation: ce qu’elle fait réellement
PUT /v4.0/cells/spreadsheet/repair est intentionnellement simple — aucun paramètre, aucune configuration. En interne, il:
- Analyse le classeur à l’aide du lecteur strict du moteur.
- Supprime les parties structurellement invalides (relations orphelines, XML malformé, références de cellules invalides).
- Resérialise dans un nouveau conteneur XLSX.
Le résultat est un fichier qui s’ouvre correctement dans Excel. Ce qu’il ne peut pas corriger : la corruption au niveau des données (une cellule dont la valeur est #REF! à cause d’une formule cassée), les images perdues (si le flux d’image lui‑même est corrompu), ou les macros VBA perdues (si le vbaProject.bin est illisible). Mais pour les 80 % des cas — « Excel indique que ce fichier est corrompu et propose de le réparer » — ce point de terminaison effectue la même réparation, côté serveur, sans interface graphique.
Quand exécuter la réparation
- Lors de l’ingestion. Si votre application accepte les téléchargements d’utilisateurs, exécutez
repairavant tout autre traitement. Le coût est un appel supplémentaire, mais cela empêche les erreurs en cascade plus tard dans le pipeline. - En cas d’échecs d’exportation. Si une conversion en aval (
ConversionController) échoue avec une erreur obscure, exécutezrepaird’abord, puis réessayez la conversion.
7. Modèles d’intégration
Modèle : la fabrique de classeur
Combinez toutes les capacités de ManagementController en un seul point de terminaison d’usine dans votre application :
POST /api/reports/{tenantId}
1. Create from template: templates/{tenantId}/report.xlsx
2. Import data into the "Data" sheet starting at A2
3. Rename "Sheet1" → "Cover"
4. Accept all revisions (in case template had tracked changes)
5. Compress level 6
6. Return final XLSX
Chaque étape correspond à un appel d’API à ManagementController ou DataProcessingController. Votre point de terminaison est un orchestrateur léger.
Modèle : audit-before-process
Avant d’exécuter des opérations coûteuses au niveau des cellules :
[1] GET {name}/structure # understand what's inside
[2] GET {name}/worksheets/X/mergedcells # know where NOT to write
[3] DataProcessing/... # run the real work
Les deux appels d’inspection coûtent presque rien, mais ils empêchent les échecs coûteux à déboguer qui proviennent de l’écriture dans des zones fusionnées ou du ciblage de tables inexistantes.
8. Considérations de performance
structureest bon marché. Il parcourt les métadonnées, pas le contenu des cellules. Sans danger d’appeler sur de gros classeurs.mergedcellsest bon marché. Même raison.compressest limité par le CPU. Les niveaux supérieurs coûtent plus cher. Utilisez le niveau 6 par défaut sauf si vous avez une raison d’aller plus haut.repairest une re‑sérialisation complète. Plus coûteux quecompress. Exécutez‑le lors de l’ingestion, pas à chaque requête.accept-all-revisionss’adapte au nombre de révisions. Des centaines de révisions dans un fichier sont acceptables ; des dizaines de milliers prendront un moment.- Les variantes distantes surpassent les allers‑retours locaux. Lorsque les fichiers sont déjà dans le stockage cloud,
GET {name}/structureévite de télécharger le fichier sur votre machine juste pour l’inspecter.
9. Dépannage des problèmes courants
| Symptôme | Cause | Correction |
|---|---|---|
400 on add/worksheet |
Le nom de la feuille existe déjà ou est vide | Choisissez un nom unique, ou laissez le serveur en attribuer un automatiquement |
400 on rename/worksheet |
sourceName ne correspond à aucune feuille existante |
Les noms sont sensibles à la casse ; appelez d’abord worksheets pour les lister |
500 on compress with level=10 |
Le niveau doit être compris entre 0 et 9 | Utilisez level=9 pour une compression maximale |
repair returns a file that still won’t open |
La corruption se trouve dans le flux image/VBA, pas dans le XML structurel | repair ne peut pas corriger la corruption au niveau des données ; demandez à l’utilisateur une exportation propre |
structure returns empty Worksheets array |
Le fichier téléchargé n’est pas du tout un classeur valide | Vérifiez l’extension et le contenu du fichier ; exécutez d’abord repair |
accept-all-revisions is a no-op |
Le classeur n’a pas le suivi activé | C’est normal — aucune révision signifie qu’il n’y a rien à accepter |
mergedcells returns empty array |
Aucune région fusionnée dans la feuille | Utilisez ce signal pour écrire en toute sécurité n’importe où |
10. Rassembler le tout
Les points de terminaison ManagementController sont individuellement petits. Leur puissance provient de la composition :
- Créer un classeur à partir d’un modèle → importer des données via
DataProcessingController→ renommer des feuilles → compresser → livrer. C’est un pipeline complet de rapports SaaS en cinq appels HTTP. - Structure + mergedcells + cells → une couche d’inspection qui comprend n’importe quel classeur que vous lui lancez, sans Excel.
- Réparer à l’ingestion → accept-all-revisions → le reste de votre pipeline ne voit jamais que des classeurs propres et finalisés.
Vous n’avez pas besoin d’une ferme de serveurs. Vous n’avez pas besoin d’Excel installé. Vous avez besoin de curl et d’un plan.