1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#でデータベースをExcelファイルにエクスポートする(.NET)

Last updated at Posted at 2024-12-06

企業のビジネスが成長し、複雑さが増す中で、データの効果的な分析、共有、および報告が重要になります。Excelは広く使われているデータ処理ツールであり、その強力な計算機能、視覚化オプション、さまざまなデータ分析ツールとの互換性により、データベースからのデータエクスポートの理想的な選択肢です。C#プログラミング言語の強力な機能と、豊富な.NETライブラリのサポートを活用することで、開発者はデータベースからExcelファイルへのデータ移行を効率的に行い、特定のビジネスロジックに基づいてエクスポートプロセスをカスタマイズできます。これにより、データの正確性と完全性を確保し、ユーザーエクスペリエンスを向上させ、さまざまなユーザーの報告要求に対応できます。

本記事では、.NETプラットフォームでC#コードを使用してデータベースのデータをExcelファイルにエクスポートする方法を紹介します。

本記事で使用する方法には、無料のFree Spire.XLS for .NETと、System.Data.SQLiteおよびSystem.Data.OleDbが必要です。NuGetパッケージは以下のコマンドでインストールできます:

PM> Install-Package FreeSpire.XLS
PM> Install-Package System.Data.SQLite
PM> Install-Package System.Data.OleDb

SQLiteデータベースをExcelファイルにエクスポート

System.Data.SQLiteモジュールを使用すると、SQLiteデータベースファイルから直接データを読み取ることができます。データを読み取った後、Free Spire.XLS for .NETを使用してExcelファイルを作成し、そのデータをExcelに書き込むことができます。以下はその手順とコード例です:

  1. ファイルパスの定義

    • SQLiteデータベースファイルのパスをSample.dbに設定。
    • Excel出力ファイルのパスをoutput/DatabaseToExcel.xlsxに設定。
  2. Excelワークブックのインスタンス作成

    • 新しいWorkbookインスタンスを作成して、エクスポートするExcelファイルを表します。
    • デフォルトで含まれているワークシートを削除して、ワークブックを空にします。
  3. SQLite接続の確立

    • SQLiteConnectionクラスを使用して、SQLiteデータベースへの新しい接続を作成し、データソースとバージョン番号を指定して接続文字列を初期化します。
    • SQLiteデータベースへの接続を開きます。
  4. データベース内のすべてのテーブル名を取得

    • GetSchema("Tables")メソッドを呼び出して、データベース内のすべてのテーブル名を取得し、その結果をDataTableオブジェクトに格納します。
  5. 各テーブルを処理

    • DataTableオブジェクト内の各行を繰り返し、テーブル名を抽出します。
    • 各テーブルに対して、Excelワークブックに新しいワークシートを追加し、そのワークシートの名前をテーブル名にします。
  6. テーブルデータを読み取り、Excelに書き込む

    • SQLクエリを作成して、現在のテーブルからすべてのデータを選択し、SQLiteCommandを使用してそのクエリを実行します。
    • SQLiteDataReaderを使用してクエリ結果を読み取ります:
      • 列名を取得し、それを新しいワークシートの1行目に書き込みます。
      • 1行目(タイトル行)のフォントスタイルを太字にし、サイズを12に設定します。
      • データ行を繰り返し、各行のデータを対応するセルに書き込むと同時に、内容に合わせて列幅を自動調整します。
      • データ行のフォントサイズを11に設定します。
  7. データベース接続を閉じる

    • すべてのテーブルのデータの読み取りと書き込みが終了したら、SQLiteデータベースとの接続を閉じます。
  8. Excelファイルを保存

    • 作成したワークブックを、最初に定義したExcelファイルのパスに保存します。
    • workbookオブジェクトが使用しているリソースを解放します。

コード例

using System.Data;
using System.Data.SQLite;
using Spire.Xls;

namespace SQLiteToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // SQLiteデータベースのパス
            string sqliteFilePath = "Sample.db";

            // Excelファイルのパス
            string excelFilePath = "output/DatabaseToExcel.xlsx";

            // 新しいワークブックインスタンスを作成
            Workbook workbook = new Workbook();
            // デフォルトのワークシートを削除
            workbook.Worksheets.Clear();

            // SQLite接続を作成
            using (SQLiteConnection connection = new SQLiteConnection($"Data Source={sqliteFilePath};Version=3;"))
            {
                connection.Open();

                // すべてのテーブル名を取得
                DataTable tables = connection.GetSchema("Tables");

                // 各テーブルを繰り返す
                foreach (DataRow tableRow in tables.Rows)
                {
                    string tableName = tableRow["TABLE_NAME"].ToString();

                    // 新しいワークシートを作成
                    Worksheet sheet = workbook.Worksheets.Add(tableName);

                    // テーブルデータを取得
                    string selectQuery = $"SELECT * FROM [{tableName}]";
                    using (SQLiteCommand command = new SQLiteCommand(selectQuery, connection))
                    {
                        using (SQLiteDataReader reader = command.ExecuteReader())
                        {
                            // 列名を取得し、1行目に書き込む
                            for (int col = 0; col < reader.FieldCount; col++)
                            {
                                sheet.Range[1, col + 1].Value = reader.GetName(col);
                            }
                            // タイトル行のフォントスタイルを設定
                            sheet.Rows[0].Style.Font.IsBold = true;
                            sheet.Rows[0].Style.Font.Size = 12;

                            // データ行を書き込む
                            int rowIndex = 2;
                            while (reader.Read())
                            {
                                for (int col = 0; col < reader.FieldCount; col++)
                                {
                                    sheet.Range[rowIndex, col + 1].Value = reader.GetValue(col).ToString();
                                    // 列幅を自動調整
                                    sheet.AutoFitColumn(col + 1);
                                }
                                // データ行のフォントサイズを設定
                                sheet.Rows[rowIndex - 1].Style.Font.Size = 11;
                                rowIndex++;
                            }
                        }
                    }
                }

                connection.Close();
            }

            // Excelファイルを保存
            workbook.SaveToFile(excelFilePath);
            workbook.Dispose();
            Console.WriteLine("データが正常にExcelファイルにエクスポートされました!");
        }
    }
}

結果
SQLiteデータベースをExcelファイルにエクスポート

AccessデータベースをExcelファイルにエクスポート

System.Data.OleDbを使用すると、Accessデータベースから直接データを読み取ることができます。同様の方法で、AccessデータベースからExcelファイルにデータをエクスポートできます。以下はその手順とコード例です:

  1. ファイルパスの定義

    • AccessデータベースファイルのパスをDatabase.accdbに設定。
    • Excel出力ファイルのパスをoutput/DatabaseToExcel.xlsxに設定。
  2. Excelワークブックのインスタンス作成

    • 新しいWorkbookインスタンスを作成して、エクスポートするExcelファイルを表します。
    • デフォルトで含まれているワークシートを削除して、ワークブックを空にします。
  3. 接続文字列の定義

    • 指定したパスのAccessデータベースに接続するための接続文字列を定義します。Microsoft.ACE.OLEDB.12.0プロバイダーを使用し、セキュリ

ティ情報を保持しないように指定します。

  1. OleDb接続の確立

    • OleDbConnectionクラスを使用して、新しい接続オブジェクトを作成し、Open()メソッドを呼び出してAccessデータベースへの接続を開きます。
  2. データベース内のすべてのテーブル名を取得

    • GetSchema("Tables")メソッドを呼び出して、データベース内のすべてのテーブル名を取得し、その結果をDataTableオブジェクトに格納します。
  3. 各テーブルを処理(システムテーブルはスキップ)

    • DataTableオブジェクト内の各行を繰り返し、テーブル名を抽出します。
    • システムテーブルをスキップし、ユーザー定義のテーブルのみを処理します。TABLE_TYPE列でタイプがTABLEのものを確認します。
  4. テーブルデータを読み取り、Excelに書き込む

    • SQLクエリを作成して、現在のテーブルからすべてのデータを選択し、OleDbCommandを使用してそのクエリを実行します。
    • OleDbDataReaderを使用してクエリ結果を読み取ります:
      • 列名を取得し、それを新しいワークシートの1行目に書き込みます。
      • 1行目(タイトル行)のフォントスタイルを太字にし、サイズを12に設定します。
      • データ行を繰り返し、各行のデータを対応するセルに書き込むと同時に、内容に合わせて列幅を自動調整します。
      • データ行のフォントサイズを11に設定します。
  5. データベース接続を閉じる

    • すべてのテーブルのデータの読み取りと書き込みが終了したら、Accessデータベースとの接続を閉じます。
  6. Excelファイルを保存

    • 作成したワークブックを、最初に定義したExcelファイルのパスに保存します。
    • workbookオブジェクトが使用しているリソースを解放します。

コード例

using System.Data;
using System.Data.OleDb;
using Spire.Xls;

namespace AccessToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // Accessデータベースのパス
            string accessFilePath = "Database.accdb";

            // Excelファイルのパス
            string excelFilePath = "output/DatabaseToExcel.xlsx";

            // 新しいワークブックインスタンスを作成
            Workbook workbook = new Workbook();
            // デフォルトのワークシートを削除
            workbook.Worksheets.Clear();

            // Accessデータベースの接続文字列を定義
            string connectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={accessFilePath};Persist Security Info=False;";

            // OleDb接続を作成
            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                connection.Open();

                // すべてのテーブル名を取得
                DataTable tables = connection.GetSchema("Tables");

                // 各テーブルを繰り返す
                foreach (DataRow tableRow in tables.Rows)
                {
                    // システムテーブルをスキップ
                    if (tableRow["TABLE_TYPE"].ToString() != "TABLE") continue;

                    string tableName = tableRow["TABLE_NAME"].ToString();

                    // 新しいワークシートを作成
                    Worksheet sheet = workbook.Worksheets.Add(tableName);

                    // テーブルデータを取得
                    string selectQuery = $"SELECT * FROM [{tableName}]";
                    using (OleDbCommand command = new OleDbCommand(selectQuery, connection))
                    {
                        using (OleDbDataReader reader = command.ExecuteReader())
                        {
                            // 列名を取得し、1行目に書き込む
                            for (int col = 0; col < reader.FieldCount; col++)
                            {
                                sheet.Range[1, col + 1].Value = reader.GetName(col);
                            }
                            // タイトル行のフォントスタイルを設定
                            sheet.Rows[0].Style.Font.IsBold = true;
                            sheet.Rows[0].Style.Font.Size = 12;

                            // データ行を書き込む
                            int rowIndex = 2;
                            while (reader.Read())
                            {
                                for (int col = 0; col < reader.FieldCount; col++)
                                {
                                    sheet.Range[rowIndex, col + 1].Value = reader.GetValue(col)?.ToString() ?? "";
                                    // 列幅を自動調整
                                    sheet.AutoFitColumn(col + 1);
                                }
                                // データ行のフォントサイズを設定
                                sheet.Rows[rowIndex - 1].Style.Font.Size = 11;
                                rowIndex++;
                            }
                        }
                    }
                }

                connection.Close();
            }

            // Excelファイルを保存
            workbook.SaveToFile(excelFilePath);
            workbook.Dispose();
            Console.WriteLine("データが正常にExcelファイルにエクスポートされました!");
        }
    }
}

結果
AccessデータベースをExcelファイルにエクスポート

この記事では、.NETプラットフォーム上でC#を使用してデータベースをExcelファイルにエクスポートする方法を説明しました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?