Winforms 如何在使用closedxml导出到excel时为datatable中的每10000条记录添加新工作表
我的datatable有100000条记录,我想为datatable中的每10000条记录创建一个新的工作表。如何通过datatable进行迭代来实现这一点Winforms 如何在使用closedxml导出到excel时为datatable中的每10000条记录添加新工作表,winforms,datatable,iteration,export-to-excel,closedxml,Winforms,Datatable,Iteration,Export To Excel,Closedxml,我的datatable有100000条记录,我想为datatable中的每10000条记录创建一个新的工作表。如何通过datatable进行迭代来实现这一点 int sheetcount = 1; using (XLWorkbook wb = new XLWorkbook()) { var ws = wb.Worksheets.Add(comboBox1.Text.ToString() + sheetcount.ToString()); //ws.Cells().Style.Border.
int sheetcount = 1;
using (XLWorkbook wb = new XLWorkbook())
{
var ws = wb.Worksheets.Add(comboBox1.Text.ToString() + sheetcount.ToString());
//ws.Cells().Style.Border.DiagonalBorderColor = XLColor.Black;
ws.Row(1).Height=50;
//ws.FirstRow().Merge();
ws.Range(1, 2, 1,18).Merge();
//ws.Row(1).Merge();
//ws.Row(1).Value = comboBox1.Text.ToString();
//ws.Row(1).Cell(1).im
ws.Row(1).Cell(2).Value = comboBox1.Text.ToString().ToUpper();
ws.Row(1).Cell(2).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
ws.Row(1).Cell(2).Style.Alignment.Vertical=XLAlignmentVerticalValues.Center;
ws.Row(1).Cell(2).Style.Fill.BackgroundColor = XLColor.Red;
ws.Row(1).Cell(2).Style.Font.FontColor = XLColor.White;
ws.Row(1).Cell(2).Style.Font.FontSize = 21;
ws.Row(1).Cell(2).Style.Font.Bold = true;
ws.Column(1).Merge();
ws.Column(1).Style.Fill.BackgroundColor = XLColor.Red;
ws.Cell(2, 2).InsertTable(dt);
ws.Row(2).Style.Fill.BackgroundColor = XLColor.Orange;
ws.Tables.FirstOrDefault().ShowAutoFilter = false;
ws.Columns().AdjustToContents();
wb.SaveAs(fi.ToString());
}
最简单的方法是使用foreach循环并使用该方法读取和加载新数据表中的10000行。当新的DataTable包含10000行时,我调用一个helper方法来实际创建工作表并将表插入其中 您的主要方法如下所示:
using (XLWorkbook wb = new XLWorkbook())
{
// same structure of datatable
var copyTable = dt.Clone();
foreach(DataRow row in dt.Rows)
{
// copy over row
copyTable.ImportRow(row);
// check if we reached 10000
if (copyTable.Rows.Count == 10000)
{
// store the datatable
CreateSheetForTable(wb, copyTable);
// reset datatabble to initial state ....
copyTable = dt.Clone();
// ... so the next 10000 rows can be loaded
}
}
// don't forget to copy the last bit
if (copyTable.Rows.Count>0)
{
CreateSheetForTable(copyTable);
}
wb.SaveAs(fi.ToString());
}
使用CreateSheetForTable
方法,我们的助手将使用您所有的设置创建工作簿,并插入数据表:
private void CreateSheetForTable(XLWorkBook wb, DataTable table)
{
var ws = wb.Worksheets.Add(String.Format("{0}{1}",comboBox1.Text,wb.Worksheets.Count+1));
// all other fluff removed
ws.Cell(2, 2).InsertTable(table);
}
我刚算出来。我也会检查你的答案。我也和你一样。非常感谢。