将datatable转换为.xlsx格式

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

上面的代码片段只生成.xls格式。如果我更改响应时间和文件名扩展到.xlsx它不起作用。是否有任何其他方法来做同样的事情。

根据build议,我改变了方法,并使用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(); } 

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

http://epplus.codeplex.com/