首页 > 后端开发 > C++ > 如何使用正确的 MIME 类型和格式将 DataTable 数据导出到 Excel (.xlsx) 文件?

如何使用正确的 MIME 类型和格式将 DataTable 数据导出到 Excel (.xlsx) 文件?

DDD
发布: 2025-01-05 21:18:45
原创
800 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板