本日はC#!データテーブルを渡してエクセル出力したい、そんな時のテクニックまとめです。
勿論データセットでも仕組みは同じなので、一つのエクセルに複数シート作成も可能です!
関数名
まずは関数名。シンプルにデータテーブルのみを渡し、出力出来たかどうかのtrue or falseを返します。
1 |
private Boolean DataTableExport(DataTable Dt) |
処理準備
最初にシートを指定します。別関数作ってシートを取得したりしてもいいかもしれません
で、貼り付け用の配列を定義。レコード数とカラム数分の枠で作成します
1 2 3 4 5 |
// Sheet1 Excel.Worksheet ObjSheet = (Excel.Worksheet)ObjWorkBook.Sheets[1]; // データを二次元配列に格納する String[,] pData = new String[Dt.Rows.Count, Dt.Columns.Count]; |
メイン処理
外のループはレコード数で、中のループがカラム数分繰り返し処理を行い、
順々に中身を配列に詰め込んでいきます。
1 2 3 4 5 6 7 8 9 |
// レコード分ループ for (int Row = 0; Row < Dt.Rows.Count; Row++) { // カラム分ループ for (int Column = 0; Column < Dt.Columns.Count; Column++) { pData[Row, Column] = Dt.Rows[Row][Column].ToString(); } } |
貼り付け処理
最初に指定したシートのA1セルへ貼り付けを行う。
Rangeサイズをレコード幅に合わせてから、データを詰め込んだpDataを代入。
1 2 3 4 |
// 二次元配列のデータをExcelに貼り付ける Excel.Range Rng = (Excel.Range)ObjSheet.Cells[1, 1]; Rng = Rng.get_Resize(Dt.Rows.Count, Dt.Columns.Count); Rng.Value = pData; |
コード全体図
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
///////////////////////////////////////////////////////// // 概要:データテーブル→エクセル出力 // はまみ:2019/05/26 ///////////////////////////////////////////////////////// private Boolean DataTableExport(DataTable Dt) { // Sheet1 Excel.Worksheet ObjSheet = (Excel.Worksheet)ObjWorkBook.Sheets[1]; // データを二次元配列に格納する String[,] pData = new String[Dt.Rows.Count, Dt.Columns.Count]; // レコード分ループ for (int Row = 0; Row < Dt.Rows.Count; Row++) { // カラム分ループ for (int Column = 0; Column < Dt.Columns.Count; Column++) { pData[Row, Column] = Dt.Rows[Row][Column].ToString(); } } // 二次元配列のデータをExcelに貼り付ける Excel.Range Rng = (Excel.Range)ObjSheet.Cells[1, 1]; Rng = Rng.get_Resize(Dt.Rows.Count, Dt.Columns.Count); Rng.Value = pData; } |
まとめ
上記実行で単純出力が可能ですが、もう少し見た目にもこだわりたい!って芸術家体質の方は下記で自分好みにカスタマイズも出来ます。
1 2 3 4 5 6 7 8 |
// 列幅自動調整 Rng.Columns.AutoFit(); // 罫線(点線) Rng.Borders.LineStyle = XlLineStyle.xlDot; // 罫線(囲線) Rng.Borders.LineStyle = XlLineStyle.xlContinuous; |
まぁ完全にお好みですけども、罫線も色々種類があるのでお気に入りの見た目で出力しちゃいましょう!
コメント