在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);
添加到excel时,在Datatable
时出现错误。有人可以告诉我我做错了什么。 最佳答案
在尝试添加没有表名的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");
}
}
}