Winforms 如何在使用closedxml导出到excel时为datatable中的每10000条记录添加新工作表

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.

我的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.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);
}

我刚算出来。我也会检查你的答案。我也和你一样。非常感谢。