システム間でデータを効率的に統合することは、生産性を向上させ、情報に基づいた意思決定を行う上で非常に重要です。この分野で一般的なタスクの 1 つは、Excel とデータベース間でデータを転送することです。Excel ファイルをデータベースにインポートすることで、Excel にはない効率的なクエリ、トランザクションサポート、並行処理管理などの強力な機能を活用できます。一方、データベースのデータを Excel にエクスポートすることで、広く使用されている馴染みのある形式で、詳細な分析、レポート作成、および共有が可能になります。 この記事では、Spire.XLS for .NET と C# を使用して、Excel データをデータベースにインポートする方法と、データベースのデータを Excel ファイルにエクスポートする方法を解説します。 Excel データをデータベースにインポートする データベースのデータを Excel ファイルにエクスポートする Spire.XLS for .NET をインストールします まず、Spire.XLS for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。 PM> Install-Package Spire.XLS Excel データをデータベースにインポートする Spire.XLS for .NET を使うと、Workbook.LoadFromFile() メソッドで Excel ファイルをロードし、CellRange.Value プロパティを利用してセルデータを取得できます。その後、System.Data.SQLite モジュールなどを使用してデータベース操作を行い、データをデータベースに書き込むことが可能です。 以下の手順とコードでは、SQLite を例にして、C# を使って Excel データをデータベースにインポートする方法を示します。 Excel ファイルと出力先データベースのパスを定義します。 Workbook クラスのインスタンスを作成し、Workbook.LoadFromFile() で Excel ファイルを読み込みます。 SQLite データベースを作成するか、既存のデータベースに接続します。 ワークブック内の各ワークシートを繰り返し処理し、各ワークシートごとにデータベーステーブルを作成します。 ワークシートの最初の行を取得し、列名として使用します。 残りの行とセルを繰り返し処理して、データをデータベースに挿入します。 C# using System.Data.SQLite; using Spire.Xls; namespace ExcelToSQLite { class Program { static void Main(string[] args) { // Excelファイルのパス string excelFilePath = "Sample.xlsx"; // SQLiteデータベースのパス string sqliteFilePath = "output/Database.db"; // Excelファイルを開く Workbook workbook = new Workbook(); workbook.LoadFromFile(excelFilePath); // データベースファイルが存在しない場合、新規作成する if (!File.Exists(sqliteFilePath)) { SQLiteConnection.CreateFile(sqliteFilePath); Console.WriteLine("新しいSQLiteデータベースファイルが作成されました: output.db"); } // SQLite接続を作成 using (SQLiteConnection connection = new SQLiteConnection($"Data Source={sqliteFilePath};Version=3;")) { connection.Open(); // 各ワークシートを繰り返し処理 foreach (Worksheet sheet in workbook.Worksheets) { string tableName = sheet.Name; // 最初の行を列名として取得 var columns = sheet.Rows[0].CellList; string createTableQuery = $"CREATE TABLE IF NOT EXISTS [{tableName}] ("; foreach (var column in columns) { createTableQuery += $"[{column.Value}] TEXT,"; } createTableQuery = createTableQuery.TrimEnd(',') + ");"; // テーブルを作成 using (SQLiteCommand createTableCommand = new SQLiteCommand(createTableQuery, connection)) { createTableCommand.ExecuteNonQuery(); } // データを挿入 for (int i = 1; i < sheet.Rows.Length; i++) // 最初の行をスキップ { var row = sheet.Rows[i]; string insertQuery = $"INSERT INTO [{tableName}] VALUES ("; foreach (var cell in row.CellList) { insertQuery += $"'{cell.Value?.Replace("'", "''")}',"; // SQLインジェクション対策 } insertQuery = insertQuery.TrimEnd(',') + ");"; using (SQLiteCommand insertCommand = new SQLiteCommand(insertQuery, connection)) { insertCommand.ExecuteNonQuery(); } } } connection.Close(); workbook.Dispose(); } Console.WriteLine("Excelのデータは正常に新しいSQLiteデータベースに書き込まれました!"); } } } データベースのデータを Excel ファイルにエクスポートする SQLite データベースからデータを読み取り、Workbook オブジェクトを使用して新しい Excel ファイルを生成する方法を説明します。 データベースと出力 Excel ファイルのパスを定義します。 Workbook インスタンスを作成し、デフォルトのワークシートを削除します。 データベースに接続し、すべてのテーブル名を取得します。 各テーブルごとにワークシートを作成し、テーブル名をシート名として設定します。 テーブルの列名を取得し、ワークシートの最初の行に書き込みます。 テーブル内のデータを順次ワークシートに書き込みます。 C# using System.Data; using System.Data.SQLite; using Spire.Xls; namespace SQLiteToExcel { class Program { static void Main(string[] args) { // SQLiteデータベースのパス string sqliteFilePath = "Database.db"; // Excelファイルのパス string excelFilePath = "output/DatabaseToExcel.xlsx"; // 新しいWorkbookインスタンスを作成 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()) { // 列名を取得して、最初の行に書き込む 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ファイルにエクスポートされました!"); } } } 一時ライセンスを申請する 結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。 にお問い合わせ、30 日間有効な一時ライセンスを取得してください。