如何使用数据表和 Excel 库创建 Excel sheet?
How to create Excel sheet using DataTable and the ExcelLibrary?
我有数据-table,其中不包含列的编号,也包含 "DATE" 数据类型的日期。
我尝试了以下选项
1) 第三部分 DLL- Excel库
如果数据集中没有日期列,它工作正常,否则它使用一些虚拟值,如 -65284 而不是日期。
ExcelLibrary.DataSetHelper.CreateWorkbook(@"C:\Users\ABC\Documents\Excel\Report123.xls", ds);
2) 使用简单的导出格式而不使用第 3 方 DLL,如下所示
public void ExportToExcel(System.Data.DataTable dt)
{
if (dt.Rows.Count > 0)
{
string filename = "Report123.xls";
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
DataGrid dgGrid = new DataGrid();
dgGrid.DataSource = dt;
dgGrid.DataBind();
//Get the HTML for the control.
dgGrid.RenderControl(hw);
//Write the HTML back to the browser.
//Response.ContentType = application/vnd.ms-excel;
Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
this.EnableViewState = false;
Response.Write(tw.ToString());
Response.End();
}
}
在上面的代码中完美地提取了Excel,但是当我们打开相同的excel时却出现格式错误的错误。
我还想读取数据table中的相同文件以存储在数据库中。当我去阅读创建的 excel (通过第二个选项)时,我得到错误消息,即外部 table 不是预期的格式。如果我另存为同一个文件,那么它就可以工作。
但我不想每次都做"save As"文件。请帮助我
更新:
public void ExportToExcel1(System.Data.DataTable dt)
{
//clear the response of any junk. This may not be necessary
Response.Clear();
//add a header so it has a nice file name
Response.AddHeader("content-disposition", "attachment;filename=Reportengg.xlsx");
//Set the MIME type correctly
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
//create a new package, this is the equivalent of an XLSX file.
var package = new ExcelPackage();
//Add a new sheet to the workbook
var sheet = package.Workbook.Worksheets.Add("Sheet1");
//EPPlus contains helper function to load data from a DataTable, though you could manually fill in rows/column values yourself if you want
sheet.Cells["A1"].LoadFromDataTable(dt, true);
// byte[] array = package.GetAsByteArray();
//write the file bytes to the response
Response.BinaryWrite(package.GetAsByteArray());
//end the response so we don't send anymore down and corrupt the file
Response.End();
}
您的#1 技巧是将文件保存在服务器上。服务器端代码不能直接保存到客户端文件系统。您必须将文件字节写入响应,然后客户端的 PC 将选择如何处理它。他们是选择 "save as" 还是直接保存到某些下载文件夹取决于他们的浏览器设置。我不熟悉 ExcelLibrary
但我想他们有某种 API 来获取文件字节?去做。然后将这些字节写入响应。
byte[] bytes = GetBytesFromTheirApiSomehow();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AppendHeader("Content-Disposition", "attachment; filename=filename.xlsx");
Response.BinaryWrite(bytes);
Response.End();
我查看了 ExcelLibrary 源代码。该库似乎不再维护。或许您应该转到一个积极维护的库,例如 EPPlus。 EPPlus 实现可能如下所示:
public void ExportToExcel(System.Data.DataTable dt)
{
//clear the response of any junk. This may not be necessary
Response.Clear();
//add a header so it has a nice file name
Response.AddHeader("content-disposition", "attachment;filename=myexcelfile.xlsx");
//Set the MIME type correctly
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
//create a new package, this is the equivalent of an XLSX file.
var package = new ExcelPackage();
//Add a new sheet to the workbook
var sheet = package.Workbook.Worksheets.Add("My Data");
//EPPlus contains helper function to load data from a DataTable, though you could manually fill in rows/column values yourself if you want
sheet.Cells["A1"].LoadFromDataTable(dt, true);
//write the file bytes to the response
Response.BinaryWrite(package.GetAsByteArray());
//end the response so we don't send anymore down and corrupt the file
Response.End();
}
这对我有用:
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "Report123.xls"));
Response.ContentType = "application/vnd.ms-excel";
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(sw);
GridView1.AllowPaging = false;
GridView1.RenderControl(hw);
Response.Write(sw.ToString());
Response.End();
我有数据-table,其中不包含列的编号,也包含 "DATE" 数据类型的日期。 我尝试了以下选项
1) 第三部分 DLL- Excel库 如果数据集中没有日期列,它工作正常,否则它使用一些虚拟值,如 -65284 而不是日期。
ExcelLibrary.DataSetHelper.CreateWorkbook(@"C:\Users\ABC\Documents\Excel\Report123.xls", ds);
2) 使用简单的导出格式而不使用第 3 方 DLL,如下所示
public void ExportToExcel(System.Data.DataTable dt)
{
if (dt.Rows.Count > 0)
{
string filename = "Report123.xls";
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
DataGrid dgGrid = new DataGrid();
dgGrid.DataSource = dt;
dgGrid.DataBind();
//Get the HTML for the control.
dgGrid.RenderControl(hw);
//Write the HTML back to the browser.
//Response.ContentType = application/vnd.ms-excel;
Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
this.EnableViewState = false;
Response.Write(tw.ToString());
Response.End();
}
}
在上面的代码中完美地提取了Excel,但是当我们打开相同的excel时却出现格式错误的错误。
我还想读取数据table中的相同文件以存储在数据库中。当我去阅读创建的 excel (通过第二个选项)时,我得到错误消息,即外部 table 不是预期的格式。如果我另存为同一个文件,那么它就可以工作。
但我不想每次都做"save As"文件。请帮助我
更新:
public void ExportToExcel1(System.Data.DataTable dt)
{
//clear the response of any junk. This may not be necessary
Response.Clear();
//add a header so it has a nice file name
Response.AddHeader("content-disposition", "attachment;filename=Reportengg.xlsx");
//Set the MIME type correctly
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
//create a new package, this is the equivalent of an XLSX file.
var package = new ExcelPackage();
//Add a new sheet to the workbook
var sheet = package.Workbook.Worksheets.Add("Sheet1");
//EPPlus contains helper function to load data from a DataTable, though you could manually fill in rows/column values yourself if you want
sheet.Cells["A1"].LoadFromDataTable(dt, true);
// byte[] array = package.GetAsByteArray();
//write the file bytes to the response
Response.BinaryWrite(package.GetAsByteArray());
//end the response so we don't send anymore down and corrupt the file
Response.End();
}
您的#1 技巧是将文件保存在服务器上。服务器端代码不能直接保存到客户端文件系统。您必须将文件字节写入响应,然后客户端的 PC 将选择如何处理它。他们是选择 "save as" 还是直接保存到某些下载文件夹取决于他们的浏览器设置。我不熟悉 ExcelLibrary
但我想他们有某种 API 来获取文件字节?去做。然后将这些字节写入响应。
byte[] bytes = GetBytesFromTheirApiSomehow();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AppendHeader("Content-Disposition", "attachment; filename=filename.xlsx");
Response.BinaryWrite(bytes);
Response.End();
我查看了 ExcelLibrary 源代码。该库似乎不再维护。或许您应该转到一个积极维护的库,例如 EPPlus。 EPPlus 实现可能如下所示:
public void ExportToExcel(System.Data.DataTable dt)
{
//clear the response of any junk. This may not be necessary
Response.Clear();
//add a header so it has a nice file name
Response.AddHeader("content-disposition", "attachment;filename=myexcelfile.xlsx");
//Set the MIME type correctly
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
//create a new package, this is the equivalent of an XLSX file.
var package = new ExcelPackage();
//Add a new sheet to the workbook
var sheet = package.Workbook.Worksheets.Add("My Data");
//EPPlus contains helper function to load data from a DataTable, though you could manually fill in rows/column values yourself if you want
sheet.Cells["A1"].LoadFromDataTable(dt, true);
//write the file bytes to the response
Response.BinaryWrite(package.GetAsByteArray());
//end the response so we don't send anymore down and corrupt the file
Response.End();
}
这对我有用:
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "Report123.xls"));
Response.ContentType = "application/vnd.ms-excel";
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(sw);
GridView1.AllowPaging = false;
GridView1.RenderControl(hw);
Response.Write(sw.ToString());
Response.End();