Lire et écrire des fichiers Excel en C# sans Excel

WorkbookEditor lit et écrit des fichiers XLSX depuis .NET sans Excel installé. Ce guide couvre les valeurs, un fichier importé inconnu, les formules et la mise en forme, et là où la mise en forme s'arrête.

byte[] xlsx = WorkbookEditor.Create("Sales", new object?[][]
{
    new object?[] { "Region", "Total" },
    new object?[] { "North",  1200 },
    new object?[] { "South",  950 },
});

string before = WorkbookEditor.ReadCell(xlsx, "Sales", "B2");
byte[] updated = WorkbookEditor.SetCell(xlsx, "Sales", "B2", 1500);
string after = WorkbookEditor.ReadCell(updated, "Sales", "B2");

Les nombres restent des nombres

  • WorkbookEditor gère le XLSX. Excel n'est pas nécessaire.
  • Les valeurs de cellule sont des object?. Les nombres sont écrits comme des nombres et les chaînes comme des chaînes, donc une colonne de totaux peut être additionnée dans Excel.
  • ReadCell renvoie la valeur de la cellule sous forme de texte, pas telle qu'Excel l'affiche.
  • Une cellule contenant 1200 avec un format de nombre #,##0.00 se relit comme 1200, pas 1,200.00.

Lire un fichier qu'on vous a remis

  • Vous n'avez pas besoin de connaître la structure du classeur à l'avance.
  • SheetNames vous indique ce que contient le fichier, et ReadSheet renvoie la plage utilisée sous forme de lignes de chaînes.
  • Ensemble, ils suffisent pour parcourir un fichier importé que vous n'avez jamais vu.

Formules

  • Une cellule contenant une XlsxFormula est écrite comme une formule, pas comme du texte commençant par =.
  • Écrivez-la sans le = initial, comme dans XlsxFormula.From("SUM(Q1!B2:B4)"). Le module d'écriture ajoute le =.
  • Relue via DocToolkit, la formule donne sa valeur calculée.
  • Un lecteur qui ne lit que les valeurs en cache voit une cellule vide tant qu'Excel n'a pas ouvert et enregistré le fichier.

Donner à une feuille l'allure d'un rapport

  • XlsxFormat.Report est le préréglage habituel : en-tête en gras, en-tête figé et ajustement automatique.
  • Format est un appel distinct qui prend un classeur et un nom de feuille, donc il fonctionne sur une feuille qui existe déjà.
  • L'ajustement automatique adapte la colonne à son contenu. Avec des valeurs courtes, la colonne est plus étroite que la largeur par défaut d'Excel, 8,43 caractères.

Ce qu'il ne fait pas

  • Le vocabulaire de mise en forme est fermé : six conditions de règle, cinq types de validation et quatre surlignages. Pour des polices, bordures ou échelles de couleurs arbitraires, utilisez directement ClosedXML.
  • WithTable et WithAutoFilter ne peuvent pas cibler des plages qui se chevauchent. Appliquer les deux aux mêmes cellules lève DocumentConversionException.
  • WithTable ne fait pas tenir le tableau à jour par AppendRows. La nouvelle ligne arrive à côté du tableau, pas dedans.