Excel-Dateien in C# ohne Excel lesen und schreiben

WorkbookEditor liest und schreibt XLSX-Dateien aus .NET, ohne dass Excel installiert ist. Diese Anleitung behandelt Werte, einen unbekannten Upload, Formeln und Formatierung und wo die Formatierung endet.

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");

Zahlen bleiben Zahlen

  • WorkbookEditor deckt XLSX ab. Excel wird nicht benötigt.
  • Zellwerte sind object?. Zahlen werden als Zahlen geschrieben und Strings als Strings, sodass sich eine Spalte mit Summen in Excel addieren lässt.
  • ReadCell gibt den Wert der Zelle als Text zurück, nicht so, wie Excel ihn anzeigt.
  • Eine Zelle mit 1200 unter dem Zahlenformat #,##0.00 wird als 1200 zurückgelesen, nicht als 1,200.00.

Eine Datei lesen, die man Ihnen gegeben hat

  • Sie müssen die Struktur der Arbeitsmappe nicht im Voraus kennen.
  • SheetNames sagt Ihnen, was in der Datei steht, und ReadSheet gibt den verwendeten Bereich als Zeilen von Strings zurück.
  • Zusammen reichen sie, um einen Upload zu durchlaufen, den Sie nie gesehen haben.

Formeln

  • Eine Zelle mit einer XlsxFormula wird als Formel geschrieben, nicht als Text, der mit = beginnt.
  • Schreiben Sie sie ohne das führende =, wie in XlsxFormula.From("SUM(Q1!B2:B4)"). Der Writer fügt das = hinzu.
  • Über DocToolkit zurückgelesen, liefert die Formel ihren berechneten Wert.
  • Ein Reader, der nur zwischengespeicherte Werte liest, sieht eine leere Zelle, bis Excel die Datei geöffnet und gespeichert hat.

Ein Blatt wie einen Bericht aussehen lassen

  • XlsxFormat.Report ist die übliche Voreinstellung: fette Kopfzeile, fixierte Kopfzeile und automatische Anpassung.
  • Format ist ein eigener Aufruf, der eine Arbeitsmappe und einen Blattnamen nimmt, daher funktioniert er mit einem Blatt, das schon existiert.
  • Die automatische Anpassung passt die Spalte an ihren Inhalt an. Bei kurzen Werten ist sie schmaler als Excels Standard von 8,43 Zeichen.

Was es nicht kann

  • Das Formatierungsvokabular ist geschlossen: sechs Regelbedingungen, fünf Validierungsarten und vier Hervorhebungen. Für beliebige Schriftarten, Rahmen oder Farbskalen verwenden Sie ClosedXML direkt.
  • WithTable und WithAutoFilter können nicht auf überlappende Bereiche zielen. Beide auf dieselben Zellen anzuwenden, löst DocumentConversionException aus.
  • WithTable sorgt nicht dafür, dass AppendRows die Tabelle aktuell hält. Die neue Zeile landet neben der Tabelle, nicht darin.