C# EPPlus从datatable加载数据到excel,然后创建循环来执行同样的操作是否更有效?
我需要改进将datatable映射到excel电子表格的代码的性能 旧代码在datatable中循环并创建excel。我还创建了一个计时器,打印出生成此方法报告所需的时间:C# EPPlus从datatable加载数据到excel,然后创建循环来执行同样的操作是否更有效?,c#,excel,datatable,epplus,C#,Excel,Datatable,Epplus,我需要改进将datatable映射到excel电子表格的代码的性能 旧代码在datatable中循环并创建excel。我还创建了一个计时器,打印出生成此方法报告所需的时间: var watch = System.Diagnostics.Stopwatch.StartNew(); System.Data.DataTable dt = new System.Data.DataTable(); dt = (System.Data.DataTable)Session["ISOReport"]; Tab
var watch = System.Diagnostics.Stopwatch.StartNew();
System.Data.DataTable dt = new System.Data.DataTable();
dt = (System.Data.DataTable)Session["ISOReport"];
TableCell td;
TableRow tr;
HyperLink a;
TableHeaderRow thr;
TableHeaderCell thc;
thr = new TableHeaderRow();
thr.BorderStyle = BorderStyle.Solid;
thr.BorderColor = System.Drawing.Color.White;
for (int i = 0; i < dt.Columns.Count; i++)
{
thc = new TableHeaderCell();
thc.Text = dt.Columns[i].ColumnName;
thr.Cells.Add(thc);
}
tblReport.Rows.Add(thr);
for (int j = 0; j < dt.Rows.Count; j++)
{
tr = new TableRow();
tr.BorderStyle = BorderStyle.Solid;
tr.BorderColor = System.Drawing.Color.White;
for (int i = 0; i < dt.Columns.Count; i++)
{
td = new TableCell();
td.Text = dt.Rows[j][i].ToString();
tr.Cells.Add(td);
}
tblReport.Rows.Add(tr);
}
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;
lblInfo.Text = ReportName + " Generation Time: " + elapsedMs.ToString();
private void NewExport(string name, System.Data.DataTable dt)
{
//DataSet ds = (DataSet)Session["DSIsoReport"];
var watch = System.Diagnostics.Stopwatch.StartNew();
using (pck = new ExcelPackage())
{
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Demo");
ws.Cells["A5"].LoadFromDataTable(dt, true);
ws.DefaultColWidth = 25;
int totalRow = ws.Dimension.End.Row;
int totalCol = ws.Dimension.End.Column;
var startCell = (ExcelRangeBase)ws.Cells["A5"];
var endCell = startCell.Offset(0,0,1,totalCol);
var headerCell = ws.Cells[endCell.ToString()];
headerCell.Style.Fill.PatternType = ExcelFillStyle.Solid;
headerCell.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.BurlyWood);
var headerFont = headerCell.Style.Font;
headerFont.Bold = true;
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;
ws.Cells["A4"].LoadFromText(name + " Generation Time: " + elapsedMs.ToString());
}
}
我有一个REnder
方法,它实际上负责从aspx
页面生成excel电子表格:
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
Response.AddHeader("content-disposition", "inline;filename=" + ReportName + ".xls");
Response.ContentType = "application/vnd.ms-excel";
//Response.BinaryWrite(pck.GetAsByteArray());
base.Render(writer);
}
当运行应用程序并使用带循环的旧方法生成报告时,经过的时间是355
但使用EPPlus时,经过的时间是1676
看起来EPPlus的执行时间要长得多
根据我的研究,我认为ePlus是有效的
有什么方法可以改进代码吗?您的第一种方法使用的是什么技术?它似乎试图用HTML而不是Excel创建表。如果是这样的话,你的比较就不是一个苹果对一个苹果了。我希望看到原始方法的Excel互操作代码,但我没有看到这一部分。另外,什么类型的对象是
tblReport
?tblReport是用代码构建的html表的id。然后我还有Render
方法,该方法将页面的内容类型设置为execel。查看按钮中的代码修改也查看ClosedXML库,您可以从NuGet获得它,它使用OpenXML生成Excel工作簿(与COM相反)。我认为这似乎相当有效(尽管我没有任何指标来支持这一说法)…@NeilHibbert EPPlus也使用OpenXML,而不是COM。事实上,它可能是最流行的库。第一种方法是假的,它根本不会生成Excel工作表。你无法比较这两种方法。您还将注意到,第一种方法生成的HTML页面远远大于EPPlus生成的实际(压缩)xlsx文件