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 ManagementController possè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 DataProcessingController sur un classeur, appelez structure pour 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éé ? structure vous 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:

  1. Analyse le classeur à l’aide du lecteur strict du moteur.
  2. Supprime les parties structurellement invalides (relations orphelines, XML malformé, références de cellules invalides).
  3. 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 repair avant 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écutez repair d’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

  • structure est bon marché. Il parcourt les métadonnées, pas le contenu des cellules. Sans danger d’appeler sur de gros classeurs.
  • mergedcells est bon marché. Même raison.
  • compress est 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.
  • repair est une re‑sérialisation complète. Plus coûteux que compress. Exécutez‑le lors de l’ingestion, pas à chaque requête.
  • accept-all-revisions s’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.