【问题标题】:Convert datatable to .xlsx format将数据表转换为 .xlsx 格式
【发布时间】:2014-08-01 15:52:27
【问题描述】:
public static void ExportToExcel(DataTable dtExcel, string fileName)
{
    string attachment = "attachment; filename=" + fileName + ".xlsx";
    System.Web.HttpContext.Current.Response.ClearContent();
    System.Web.HttpContext.Current.Response.AddHeader("content-disposition", attachment);
    System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
    //System.Web.HttpContext.Current.Response.ContentType = "application/excel";
    //System.Web.HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";  
    //System.Web.HttpContext.Current.Response.ContentType = string.Empty;  
    string tab = "";
    foreach (DataColumn dc in dtExcel.Columns)
    {
        System.Web.HttpContext.Current.Response.Write(tab + dc.ColumnName);
        tab = "\t";
    }
    System.Web.HttpContext.Current.Response.Write("\n");
    int i;
    foreach (DataRow dr in dtExcel.Rows)
    {
        tab = "";
        for (i = 0; i < dtExcel.Columns.Count; i++)
        {
            System.Web.HttpContext.Current.Response.Write(tab + dr[i].ToString());
            tab = "\t";
        }
        System.Web.HttpContext.Current.Response.Write("\n");
    }

    System.Web.HttpContext.Current.Response.Flush();
    System.Web.HttpContext.Current.Response.Close();

}

上面的代码 sn-p 只生成 .xls 格式。如果我将响应时间和文件扩展名更改为 .xlsx 它不起作用。有没有其他方法可以做到这一点。

根据建议,我已更改方法并使用 openxml 库生成 .xlsx。 但它会抛出错误无法在生成大型 xlsx 文件时确定域的身份。请帮助

public static void ExportToexcel(DataTable dtExcel, string fileName)
    {
        System.Web.HttpContext.Current.Response.ClearContent();
        OpenXMLOffice openxmloffice = new OpenXMLOffice();
        MemoryStream msXML = openxmloffice.DataTableToMemoryStream(dtExcel);
        msXML.Seek(0, SeekOrigin.Begin);
        msXML.WriteTo(System.Web.HttpContext.Current.Response.OutputStream);
        System.Web.HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=DataTable.xlsx");
        System.Web.HttpContext.Current.Response.StatusCode = 200;
        System.Web.HttpContext.Current.Response.Flush();
        System.Web.HttpContext.Current.Response.Close();
    }

【问题讨论】:

  • XLSX 是一种 Open XML 电子表格格式。您需要一个可以生成这些的库,例如 Open XML SDKEPPlus
  • 您上面的代码实际上并没有生成一个 Excel (.xls) 文件,而是一个制表符分隔的文本,您告诉客户端它是一个 Excel 文件,Excel 会在它处理解析时打开内容。

标签: c# asp.net excel


【解决方案1】:

最快和最可靠的方法是使用像 epplus 这样的库,它甚至有像 toDatatTable() 和 FromDataTable() 这样的方法

http://epplus.codeplex.com/

【讨论】:

    猜你喜欢
    • 2011-03-18
    • 2018-06-21
    • 1970-01-01
    • 2014-02-27
    • 2017-05-28
    • 2011-12-10
    • 1970-01-01
    • 2020-01-02
    • 2019-05-08
    相关资源
    最近更新 更多