查询数据库后,我将使用以下方法使用ClosedXML创建Excel工作表。
创建一个数据表,并添加诸如以下的列:
var list = GetDataSetList();
var grid = new GridView
{
DataSource = list
};
grid.DataBind();
Response.ClearContent();
DataTable dt = new DataTable();
//Column Headers
dt.Columns.Add("SYSID", typeof(int));
dt.Columns.Add("RID", typeof(int));
填充行
//Populate Sheet
foreach (GridViewRow row in grid.Rows)
{
dt.Rows.Add();
for (int i = 0; i < row.Cells.Count; i++)
{
if (row.Cells[i].Text == @" ")
{
dt.Rows[dt.Rows.Count - 1][i] = DBNull.Value;
}
else
{
dt.Rows[dt.Rows.Count - 1][i] = HttpUtility.HtmlDecode(row.Cells[i].Text);
}
}
}
然后最后创建工作簿并让客户端下载
using (XLWorkbook wb = new XLWorkbook())
{
var ws = wb.Worksheets.Add(dt);
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=Data.xlsx");
using (MemoryStream MyMemoryStream = new MemoryStream())
{
wb.SaveAs(MyMemoryStream);
MyMemoryStream.WriteTo(Response.OutputStream);
Response.Flush();
Response.End();
}
}
该工作表已从客户端下载,并且在打开该工作表时出现错误,“我们在Data.xlsx中发现某些内容存在问题。您是否希望我们尝试尽可能多地恢复?”单击“是”将打开工作表,所有标题均会正确,直到AYZ(第1352列)。 AZA,...奇怪地指定为Column1,Column2等,而不是我指定的列标题。
在DataTable中,如果我检查dt.Columns
发生了什么事? ClosedXML中的列数是否有限制?还是我的方式有什么问题?