システム間でデータを効率的に統合することは、生産性を向上させ、情報に基づいた意思決定を行う上で非常に重要です。この分野で一般的なタスクの 1 つは、Excel とデータベース間でデータを転送することです。Excel ファイルをデータベースにインポートすることで、Excel にはない効率的なクエリ、トランザクションサポート、並行処理管理などの強力な機能を活用できます。一方、データベースのデータを Excel にエクスポートすることで、広く使用されている馴染みのある形式で、詳細な分析、レポート作成、および共有が可能になります。
この記事では、Spire.XLS for .NET と C# を使用して、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 日間有効な一時ライセンスを取得してください。