2012-05-11 23 views
1

私はデータベースからDataTableにデータを抽出し、Repeaterコントロールにバインドして表示しています。今度は、同じデータをExcelスプレッドシートにコピーする必要があります。どのように私はスプレッドシートを埋めるために同じDataTableを使用することができます。提案してください。DataTableからExcelシートにデータを挿入する

+0

重複質問.... :http://stackoverflow.com/questions/2800563/exporting-data-from-a-gridview-to-different-ボタンBtnExportExcelを持っていると仮定すると、エクセルワークシート – joshua

+0

リンクをありがとう。 – Bazooka

+0

@Parminderここでは、Excelスプレッドシートは既存のものか、新しいものを作成しています。新しいシートを作成する場合は、[NPOI](http://npoi.codeplex.com/) – Vinay

答えて

6

私は(多くの人が何をすべきか)本当のエクセルファイルの代わりにHTMLテーブルを作成することをお勧め。そのため、私は暖かくEPPlusLGPL license)をお勧めします。

それは簡単です。

protected void BtnExcelExport_Click(object sender, System.Web.UI.ImageClickEventArgs e) 
{ 
    try { 
     var pck = new OfficeOpenXml.ExcelPackage(); 
     var ws = pck.Workbook.Worksheets.Add("Name of the Worksheet"); 
     // get your DataTable 
     var tbl = GetDataTable(); 
     ws.Cells["A1"].LoadFromDataTable(tbl, true, OfficeOpenXml.Table.TableStyles.Medium6); 
     foreach (DataColumn col in tbl.Columns) { 
      if (col.DataType == typeof(System.DateTime)) { 
       var colNumber = col.Ordinal + 1; 
       var range = ws.Cells[1, colNumber, tbl.Rows.Count, colNumber]; 
       // apply the correct date format, here for germany 
       range.Style.Numberformat.Format = "dd.MM.yyyy"; 
      } 
     } 
     var dataRange = ws.Cells[ws.Dimension.Address.ToString()]; 
     dataRange.AutoFitColumns(); 

     Response.Clear(); 
     Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
     Response.AddHeader("content-disposition", "attachment; filename=NameOfExcelFile.xlsx"); 
     Response.BinaryWrite(pck.GetAsByteArray()); 
    } catch (Exception ex) { 
     // log exception 
     throw; 
    } 
    Response.End(); 
} 
+0

は魅力的に機能します。乾杯! – Bazooka

0

.csvファイルを作成できます。これはすばやく簡単で、Excelで開くことが可能です。

この投稿は、あなたに関する:

Convert DataTable to CSV stream

関連する問題