首頁 > 後端開發 > C++ > 如何使用EPPlus高效地將資料匯出到Excel文件?

如何使用EPPlus高效地將資料匯出到Excel文件?

Patricia Arquette
發布: 2025-01-05 21:30:41
原創
336 人瀏覽過

How to Efficiently Export Data to an Excel File Using EPPlus?

如何匯出到 Excel?

本指南沒有展示如何建立 Excel 文件,而是展示了使用表格建立 HTML 文件的技巧。 Excel 會嘗試使用預設設定匯入帶有表格的 csv 或 HTML 文件,但這通常會失敗。

使用 EPPlus 等程式庫建立正確的 Excel 檔案要容易得多。
I我確信這個問題之前已經得到解答,但我找不到一個答案來說明如何從資料建立Excel 檔案並為xlsx 設定正確的內容類型file.

EPPlus 提供了LoadFromDataTable 和LoadFromCollection方法,用於使用從DataTable 或通用集合中提取的資料填入Excel 範圍。列或屬性名稱分別用作標題。

public ActionResult ExportData()
{

    //Somehow, load data to 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;
登入後複製

您也可以套用將表格樣式傳遞給範圍,或是將所需的樣式傳遞給LoadFromDataTable 或LoadFromCollection,例如:

ws.Cells[1,1].LoadFromDataTable(table, true, TableStyles.Light1);
登入後複製

這個函式庫的 Githup wiki 展示如何格式化結果、產生公式、資料透視表、處理表等。

如果您想創建,保存到 MemoryStream 可能是一個問題相對較大的紙張。將相同的資料寫入兩次,一次寫入 MemoryStream,然後將其複製到輸出,這會浪費週期。不過,直接從 MVC 操作寫入輸出流是一種不好的做法。訣竅是建立一個處理 EPPlus 套件的自訂 FileResult 並返回它,而不是 File 返回的 FileResult,例如:

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

        Package = package;
    }

    public ExcelPackage Package { get; private set; }

    protected override void WriteFile(HttpResponseBase response)
    {
        // grab chunks of data and write to the output stream
        Stream outputStream = response.OutputStream;
        using (Package)
        {
            Package.SaveAs(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"};
}
登入後複製

以上是如何使用EPPlus高效地將資料匯出到Excel文件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板