質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

4回答

20356閲覧

C# DataTableのExcel出力方法

Roines

総合スコア18

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

0クリップ

投稿2016/07/21 03:38

編集2016/07/21 04:29

SQLserverより取得してきた内容を格納したDataTableがあります。
そのDataTableの内容をExcelへと出力したいのですが、どのように書けばいいのでしょうか?

DataGridViewの内容をExcelへと出力する方法は分かるのですが、DataTableの場合のやり方がさっぱり分からない為質問させていただきました。

また、一応Excelで出す様に、と言われているので、Excel出力の方法、でお願いします。

拙い質問ですが、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
Gia2apo

総合スコア62

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Rowsを使用し、foreachで回してみたところ、上手くいきました!

C#

1foreach (DataRow item in dtSample.Rows) 2{ 3 rgn = w_rgn[i, n]; 4 rgn.Value2 = item["name"].ToString(); 5 n++; 6}

投稿2016/07/22 02:24

Roines

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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

so-ichiro

総合スコア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

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Roines

2016/07/21 04:27

言葉足らずですみません…! 一応Excelで出すように決まっていまして、出来ればExcelで出したいのです…!
Zuishin

2016/07/21 04:30

Excel で扱えるファイルには xls xlsx csv などありますが、今回はその中で最も易しい csv をお勧めしました。
Roines

2016/07/21 04:31

度々申し訳ありません。 xlsx形式指定ですね。。。
Zuishin

2016/07/21 04:32

xlsx などへの書き出しが問題ないということであれば、そこは無視してください。Rows プロパティを使います。
alg

2016/07/21 04:44

StreamWriter等でcsvとして出力→そのファイルをExcelアプリケーションで開く(COM)→SaveAsでxlsxとして保存 とすれば、比較的簡単にxlsxとして保存できそうですね。 xlsx特有の情報(書式など)を変更したいのであれば、もうひと手間必要にはなりますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問