首页 >后端开发 >C++ >如何使用EPPlus高效地将数据导出到Excel文件?

如何使用EPPlus高效地将数据导出到Excel文件?

Patricia Arquette
Patricia Arquette原创
2025-01-05 21:30:41323浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn