2016-03-19 14 views
0

私のデータテーブルには100,000レコードがあります。データテーブルに10,000レコードごとに新しいワークシートを作成します。これを行うためにデータテーブルを反復処理する方法。closedxmlを使用してエクスポートする際に、10000レコードごとに新しいワークシートを追加する方法

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()); 
} 

答えて

0

foreachループを使用して、これを行うと方法ImportRowで新しいDataTableの10,000行を読んで、ロードする最も簡単な方法。新しいDataTableに10,000行が含まれている場合は、実際にワークシートを作成してその中にテーブルを挿入するヘルパーメソッドを呼び出します。

あなたの主な方法は次のようになります。

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); 
} 
+0

私はちょうどそれを働きましたでる。私もあなたの答えをチェックします。あなたがしたのと同じことをしました。ありがとうございました。 – Tan

関連する問題