Heim >Backend-Entwicklung >C++ >Wie exportiere ich DataTable-Daten in eine Excel-Datei (.xlsx) mit dem richtigen MIME-Typ und der richtigen Formatierung?

Wie exportiere ich DataTable-Daten in eine Excel-Datei (.xlsx) mit dem richtigen MIME-Typ und der richtigen Formatierung?

DDD
DDDOriginal
2025-01-05 21:18:45841Durchsuche

How to Export DataTable Data to an Excel (.xlsx) File with Proper MIME Type and Formatting?

Wie exportiere ich Tabellendaten mit den richtigen Methoden nach Excel und stelle den richtigen MIME-Typ für eine Excel-Datei (xlsx) ein?

Die Die bereitgestellte Anleitung zeigt nicht, wie eine Excel-Datei erstellt wird. Stattdessen wird eine Problemumgehung verwendet, die eine HTML-Datei mit einer Tabelle generiert. Excel kann beim Versuch, CSV- oder HTML-Dateien mit Tabellen zu importieren, die nicht den Standardeinstellungen entsprechen, auf Formatierungsfehler stoßen.

Das Erstellen einer echten Excel-Datei mit EPPlus ist wesentlich einfacher. LoadFromDataTable und LoadFromCollection von EPPlus können verwendet werden, um einen Excel-Bereich mit Daten aus einer DataTable oder einer generischen Sammlung zu füllen. Überschriften werden mithilfe der Spalten- bzw. Eigenschaftsnamen generiert.

public ActionResult ExportData()
{
    // Load data into a DataTable
    
    using (ExcelPackage package = new ExcelPackage())
    {
        var ws = package.Workbook.Worksheets.Add("My Sheet");
        // true generates headers
        ws.Cells["A1"].LoadFromDataTable(dataTable, true);

        var stream = new MemoryStream();
        package.SaveAs(stream);

        string fileName = "myfilename.xlsx";
        string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

        stream.Position = 0;
        return File(stream, contentType, fileName);
    }
}

LoadFromDataTable und LoadFromCollection geben einen Excel-Zellenbereich zurück, der zum Anwenden von Formatierungen auf die Tabelle verwendet werden kann:

var range = ws.Cells["A1"].LoadFromDataTable(table);
range.Style.Numberformat.Format = "#,##0.00";
range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;

Zusätzlich , können Sie einen Tabellenstil auf den Bereich anwenden:

ws.Cells[1,1].LoadFromDataTable(table, true, TableStyles.Light1);

Formatierung, Formeln, PivotTables und die Handhabung von Tabellen finden Sie alle im GitHub-Wiki der Bibliothek.

Das Speichern in einem MemoryStream ist aufgrund des doppelten Schreibens von Daten (in den Speicher und den Ausgabestream) möglicherweise nicht ideal für größere Blätter. Es wird jedoch davon abgeraten, FileResult direkt aus einer MVC-Aktion zurückzugeben. Die Lösung besteht darin, ein FileResult zu erstellen, das auf EPPlus-Pakete zugeschnitten ist:

public class EpplusResult: FileResult
{
    public EpplusResult(ExcelPackage package)
        : base("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    {
        Package = package;
    }

    public ExcelPackage Package { get; private set; }

    protected override void WriteFile(HttpResponseBase response)
    {
        Package.SaveAs(response.OutputStream);
    }
}

Dies ermöglicht Folgendes in Ihrer Aktion:

public FileResult ExportData()
{
    ExcelPackage package = new ExcelPackage();
    var ws = package.Workbook.Worksheets.Add("My Sheet");       
    ...
    ws.Cells[1,1].LoadFromDataTable(table, true, TableStyles.Light1);

    return new EpplusResult(package){FileDownloadName = "SomeFile.xlsx"};
}

Das obige ist der detaillierte Inhalt vonWie exportiere ich DataTable-Daten in eine Excel-Datei (.xlsx) mit dem richtigen MIME-Typ und der richtigen Formatierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn