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

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

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

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

5722閲覧

C#でExcelにカテゴリ別にシートごとに出力したい

marutake

総合スコア14

C#

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2019/08/27 03:02

C#でExcelシート別に出力したい

C# visualstudioにてデータベースのデータをExcelにシート別に表示させたいです。
Excelに表示させることまではできましたが、シート別に表示させることができません。

カテゴリ別に表示させたいです。
無知で申し訳ないですが、調べても分からなかったのでご協力いただきたいです。

発生している問題・エラーメッセージ

該当の列を抽出して、その抽出したカテゴリ別でのExcelの表示を行いたいのですが、抽出してからのシート別出力の仕方が調べても分かりませんでした。

該当のソースコード

ソースコード

試したこと

foreach (DataRow row in xx.xxxx)
{
string 抽出1 = "番号='" + row["番号"].ToString() + "'";

データベースの列の抽出は現在このようにやっています。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

BluOxy

2019/08/27 03:32

Excelの操作にはMicrosoft.Office.Interop.Excelを使用していますか?何のdllを使用しているかを記載してください。
marutake

2019/08/27 03:34

Excelの操作にはMicrosoft.Office.Interop.Excelを使用しています
guest

回答1

0

ベストアンサー

Microsoft.Office.Interop.Excelは使ったことがないため方針のみの回答になります。

まず、Microsoft.Office.Interop.Excelの使用方法を確認する際はMicrosoft.Office.Interop.Excel Namespaceがリファレンスになるので、ここでどのようなオブジェクトがあるかを見るべきかと思います。

該当の列を抽出して、その抽出したカテゴリ別でのExcelの表示を行いたいのですが、抽出してからのシート別出力の仕方が調べても分かりませんでした。

この場合、下記2つの手順を行うことで実装ができます。
0. カテゴリ別に分ける処理を実装
0. カテゴリの種類分、Worksheets.Add(Object, Object, Object, Object) Methodを呼び出し、カテゴリ毎に分けた各列を各ワークシートに書き込む

C#

1private void WriteToWorkBook(WorkBook wb ){ 2 foreach (DataRow row in xx.xxxx) 3 { 4 string 抽出1 = "番号='" + row["番号"].ToString() + "'"; 5 string categoryName = "hoge"; //TODO:正しいカテゴリ名をどこかから取得する 6 WorkSheet ws = 抽出1が新しいカテゴリなら ? 7 CreateCategorySheet(wb, categoryName) : 8 (Worksheet)workbook.Worksheets[categoryName]; 9 10 WriteToWorkSheet(ws); 11 //NOTE: Excelのプロセスが残ったままになることを防ぐため、COMオブジェクトの解放が必要 12 System.Runtime.InteropServices.Marshal.ReleaseComObject(ws); 13 } 14} 15 16private void WriteToWorkSheet(WorkSheet ws){ 17 //TODO: wsにデータを書き込む処理を作成 18} 19 20private Worksheet CreateCategorySheet(WorkBook wb, string categoryName){ 21 wb.Worksheets.Add(); 22 //NOTE: wb.Sheets[1]がブックの最初にあるシートなのでCountから1を引く必要はなさそう 23 ws = (Worksheet)wb.Sheets[wb.Sheets.Count()]; 24 ws.Name = categoryName; 25 return ws; 26}

また、Excelファイル自体の出力方法が分からない場合は新規にExcelファイルを作成し、データを書き込み保存するを参考にすると良いでしょう。

最後に、そもそもの話になりますが、Excelを操作するためのライブラリを使った方が良いかもしれません。
Excelファイルを C# と VB.NET で読み込む "正しい" 方法に目を通してください。

個人的にはEPPlusというライブラリもお勧めです。

投稿2019/08/27 04:30

編集2019/08/27 05:09
BluOxy

総合スコア2663

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

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

marutake

2019/08/27 15:39

親切にコードまで書いてくださりありがとうございます! 参考にさせていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問