首頁 >後端開發 >C++ >如何使用正確的 MIME 類型和格式將 DataTable 資料匯出到 Excel (.xlsx) 檔案?

如何使用正確的 MIME 類型和格式將 DataTable 資料匯出到 Excel (.xlsx) 檔案?

DDD
DDD原創
2025-01-05 21:18:45841瀏覽

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

如何使用正確的方法將表格資料​​匯出到 Excel 並為 Excel (xlsx) 檔案設定正確的 MIME 類型?

提供的指南未示範如何建立 Excel 檔案;相反,它採用了一種解決方法,產生包含表格的 HTML 檔案。當嘗試匯入包含不遵守其預設設定的表格的 CSV 或 HTML 檔案時,Excel 可能會遇到格式錯誤。

使用 EPPlus 建立真正的 Excel 檔案要簡單得多。 EPPlus 中的 LoadFromDataTable 和 LoadFromCollection 可用於使用 DataTable 或通用集合中的資料填入 Excel 範圍。分別使用列名稱或屬性名稱產生標題。

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 和LoadFromCollection 傳回可用於將格式套用至表格的Excel 儲存格範圍:

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

此外,您可以將表格樣式套用至範圍:

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

格式、公式、資料透視表和表格處理都可以在庫的GitHub wiki中找到。

由於重複的資料寫入(到記憶體和輸出流),保存到 MemoryStream 可能不適合較大的工作表。但是,不鼓勵直接從 MVC 操作傳回 FileResult。解決方案是建立一個專為 EPPlus 套件自訂的 FileResult:

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

這允許您在操作中執行以下操作:

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

以上是如何使用正確的 MIME 類型和格式將 DataTable 資料匯出到 Excel (.xlsx) 檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn