SQLserverより取得してきた内容を格納したDataTableがあります。
そのDataTableの内容をExcelへと出力したいのですが、どのように書けばいいのでしょうか?
DataGridViewの内容をExcelへと出力する方法は分かるのですが、DataTableの場合のやり方がさっぱり分からない為質問させていただきました。
また、一応Excelで出す様に、と言われているので、Excel出力の方法、でお願いします。
拙い質問ですが、よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
Visual Studioの参照にSpire.XLS for.NETを追加します
C#
1private void button1_Click(object sender, EventArgs e) 2 { 3 //データベースへの接続 4 OleDbConnection connection = new OleDbConnection(); 5 connection.ConnectionString @"Provider=""Microsoft.Jet.OLEDB.4.0"";Data Source=""demo.mdb"";User Id=;Password=" 6 OleDbCommand command = new OleDbCommand(); 7 command.CommandText = "select * from parts"; 8 DataSet dataSet = new System.Data.DataSet(); 9 OleDbDataAdapter dataAdapter = new OleDbDataAdapter(command.CommandText,connection); 10 dataAdapter.Fill(dataSet); 11 DataTable t = dataSet.Tables[0]; 12 //データテーブルをexcelにエクスポート 13 Workbook book = new Workbook(); 14 Worksheet sheet = book.Worksheets[0]; 15 sheet.InsertDataTable(t, true, 1, 1); 16 book.SaveToFile("insertTableToExcel.xls",ExcelVersion.Version97to2003); 17 System.Diagnostics.Process.Start("insertTableToExcel.xls"); 18 }
投稿2023/01/11 03:08
編集2023/01/11 03:10総合スコア62
0
Microsoft.Office.Interop.Excelを参照に追加して下さい。
C#
1public void ExportExcel(System.Data.DataTable dtbl, String path, String filenm) { 2 var app = new Microsoft.Office.Interop.Excel.Application(); 3 4 try { 5 6 app.Visible = false; 7 app.DisplayAlerts = false; 8 9 var wb = app.Workbooks.Add(); 10 var ws = wb.Sheets[1]; 11 const String extension = ".xlsx"; 12 ws.Select(Type.Missing); 13 14 for (int col = 0; col < dtbl.Columns.Count; col++) { 15 object[,] obj = new object[dtbl.Rows.Count + 1, 1]; 16 obj[0, 0] = dtbl.Columns[col].ColumnName; 17 for (int row = 0; row < dtbl.Rows.Count; row++) { 18 obj[row + 1, 0] = dtbl.Rows[row][col].ToString(); 19 } 20 21 var rgn = ws.Range[ws.Cells[1, col + 1], ws.Cells[dtbl.Rows.Count + 1, col + 1]]; 22 rgn.Font.Size = 10; 23 rgn.Font.Name = "MSゴシック"; 24 DataColumn dtcol = dtbl.Columns[col]; 25 if (dtcol.DataType.Equals(typeof(String))) { 26 rgn.NumberFormatLocal = "@"; 27 rgn.Value2 = obj; 28 } else { 29 rgn.Value2 = obj; 30 } 31 } 32 wb.SaveAs(Path.Combine(path, filenm + extension)); 33 wb.Close(false); 34 app.Quit(); 35 } catch (Exception ex) { 36 Console.Write(ex.Message); 37 app.Quit(); 38 } 39}
後はエラー処理など適当に改変してみてはいかがでしょうか?
投稿2016/07/21 06:02
総合スコア74
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
Excel ファイルも色々と種類がありますが、CSV で出力するのが簡単です。
DataTable から直接 CSV へと変換するメソッドはありません。CSV を扱うライブラリは無料のも含めて様々ありますので、複雑な場合はそれを探して使いますが、この場合は簡単な作業しかしないので、自分で作ればいいと思います。
DataTable には Rows プロパティがあります。これは DataRow クラスのコレクションで、DataRow はデータの行を表します。
DataRow から各コラムのデータを取り出すには、以前はインデクサを使っていましたが、Fields<T> 拡張メソッドを使うと簡単です。例えばコラム名が ID で、型が int だとすると、row.Fields<int>("ID") のようにして取り出します。
CSV の構造は次のようになっています。
CSVファイルフォーマットの解説
データには「,」や「"」があると想定して書き出してください。
今のデータにはなくても、将来的に「そういえば以前 CSV を出力するものを作ったな」と思い出して使う時にはあるかもしれません。
投稿2016/07/21 03:59
総合スコア28673
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/21 04:44

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。