工作表名称不能为空

我收到错误在Excel文档中下载数据时, Worksheet names cannot be empty 。 下面是我从哪里得到错误的代码

 protected void btnDownloadExcel_OnClick(object sender, EventArgs e) { try { DataTable dt = GetReportData(); if (dt.Rows.Count > 0) { string fileName = drpReports.SelectedItem.ToString(); using (XLWorkbook excel = new XLWorkbook()) { //error from below line excel.Worksheets.Add(dt); excel.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; excel.Style.Font.Bold = true; Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("content-disposition", "attachment;filename=" + fileName + ".xlsx"); using (var myMemoryStream = new MemoryStream()) { excel.SaveAs(myMemoryStream); myMemoryStream.WriteTo(Response.OutputStream); Response.Flush(); HttpContext.Current.Response.End(); } } } else { ScriptManager.RegisterStartupScript(Page, Page.GetType(), "err_msg", "<script language='javascript'>alert('No records found. Please check the selection criteria.');</script>", false); } } catch (Exception ex) { ScriptManager.RegisterStartupScript(Page, Page.GetType(), "err_msg", "<script language='javascript'>alert('Oops..!! some error occured. Please contact to administrator.');</script>", false); log4net.ThreadContext.Properties["loginid"] = LoggedInUserDetails.LoginId.ToString(); Log.Error(ex.Message, ex); } } 

我在excel.Worksheets.Add(dt); 同时添加我的Datatable excel。 有人能告诉我我做错了吗?

我能够看到提到的问题,同时试图添加一个没有表名的DataTable。 当我尝试与表名的DataTable,它工作正常。 在这种情况下,DataTable名称将被保留为工作表的名称。

 using ClosedXML.Excel; using System; using System.Data; namespace ClosedXML_Test { class Program { /// <summary> /// This example method generates a DataTable. /// </summary> static DataTable GetTable() { DataTable table = new DataTable("Test");//DataTable with name - works fine //DataTable table = new DataTable("Test"); //DataTable without name - issue reproduced as you mentioned table.Columns.Add("Dosage", typeof(int)); table.Columns.Add("Drug", typeof(string)); table.Columns.Add("Patient", typeof(string)); table.Columns.Add("Date", typeof(DateTime)); // Here we add five DataRows. table.Rows.Add(25, "Indocin", "David", DateTime.Now); table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now); table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now); table.Rows.Add(21, "Combivent", "Janet", DateTime.Now); table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now); return table; } static void Main(string[] args) { var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add(GetTable()); workbook.SaveAs("Sample.xlsx"); workbook.Dispose(); System.Diagnostics.Process.Start("Sample.xlsx"); } } } 
 protected void btnDownloadExcel_OnClick(object sender, EventArgs e) { try { DataTable dt = GetReportData(); if (dt.Rows.Count > 0) { string fileName = drpReports.SelectedItem.ToString(); string attachment = "attachment;filename=" + fileName + ' ' + DateTime.Now.ToShortDateString() + ".xlsx"; Response.ClearContent(); Response.AddHeader("content-disposition", attachment); Response.ContentType = "application/vnd.ms-excel"; string tab = ""; foreach (DataColumn dc in dt.Columns) { Response.Write(tab + dc.ColumnName); tab = "\t"; } Response.Write("\n"); int i; foreach (DataRow dr in dt.Rows) { tab = ""; for (i = 0; i < dt.Columns.Count; i++) { Response.Write(tab + dr[i].ToString()); tab = "\t"; } Response.Write("\n"); } HttpContext.Current.Response.Flush(); // Sends all currently buffered output to the client. HttpContext.Current.Response.SuppressContent = true; // Gets or sets a value indicating whether to send HTTP content to the client. HttpContext.Current.ApplicationInstance.CompleteRequest(); // Causes ASP.NET to bypass all events and filtering in the HTTP pipeline chain of execution and directly execute the EndRequest event. } else { ScriptManager.RegisterStartupScript(Page, Page.GetType(), "err_msg", "<script language='javascript'>alert('No records found. Please check the selection criteria.');</script>", false); } } catch (Exception ex) { ScriptManager.RegisterStartupScript(Page, Page.GetType(), "err_msg", "<script language='javascript'>alert('Oops..!! some error occured. Please contact to administrator.');</script>", false); log4net.ThreadContext.Properties["loginid"] = LoggedInUserDetails.LoginId.ToString(); Log.Error(ex.Message, ex); } } 

 YourDataTableName.TableName = "Enter_a_Name_same_as_Excelsheetname"; 

在宣布你的

 XLWorkbook excel= new XLWorkbook() 

要么

  var ws= excel.Worksheets.Add(table); ws.Name="Enter_a_Name_same_as_Excelsheetname";