企業向けアプリケーション開発では、Excelは技術者と業務担当者の間で構造化データをやり取りするための橋渡しとしてよく利用されます。柔軟なフォーマット、共有の容易さ、そして利用者に馴染みがある点から、データベースのデータをExcelファイルにエクスポートする処理は、レポート作成、監査履歴の管理、データ移行、臨時分析などの場面で頻繁に行われます。
本記事では、Spire.XLS for .NET を使用して C#からデータベースのレコードを効率的にExcelファイルへエクスポートする方法を解説します。サンプルはSQL Serverデータベースを使用していますが、SQLite、MySQL、Oracleなどの他のリレーショナルデータベースにも、接続方法を変更するだけで同様の手順が適用できます。
目次
準備
コーディングを始める前に、開発環境を整えてください。
.NETバージョン:.NET Framework、.NET Core、.NET 6、.NET 8に対応
IDE:Visual Studio(Community Edition以上)
データベース:本記事では SQL Server Express を使用(Windows認証を利用。SQL認証も可)
必要なライブラリ:
- Spire.XLS for .NET(NuGetで
Install-Package Spire.XLS
をインストール) - Microsoft.Data.SqlClient(SQL Serverアクセス用ドライバ、NuGetでインストール)
- Spire.XLS for .NET(NuGetで
サンプルデータベース
以下のSQLスクリプトをSQL Server Expressで実行すると、Employees
テーブルが作成され、テストデータが挿入されます。
CREATE TABLE Employees (
Id INT PRIMARY KEY IDENTITY,
Name NVARCHAR(100) NOT NULL,
Department NVARCHAR(50) NOT NULL,
Position NVARCHAR(50),
HireDate DATE NOT NULL,
Salary DECIMAL(10, 2) NOT NULL,
IsFullTime BIT NOT NULL
);
INSERT INTO Employees (Name, Department, Position, HireDate, Salary, IsFullTime) VALUES
(N'佐藤太郎', N'人事部', N'人事マネージャー', '2018-05-01', 5500.00, 1),
(N'鈴木一郎', N'情報技術部', N'ソフトウェアエンジニア', '2020-09-15', 7200.50, 1),
(N'高橋花子', N'経理部', N'会計士', '2019-11-20', 6300.75, 0),
(N'田中美咲', N'マーケティング部', N'コンテンツスペシャリスト', '2021-02-10', 4800.00, 1);
MySQLやSQLiteを使用する場合は、SQL構文や接続文字列を変更するだけで、エクスポートの基本ロジックは変わりません。
C#でデータベースデータをExcelにエクスポートする手順
1. データベース接続を確立する
SQL Server Expressの場合、SqlConnectionを使って接続します。
string connectionString = @"Data Source=YourServer\SQLEXPRESS;Initial Catalog=YourDatabaseName;Integrated Security=True;";
- Windows認証:
Integrated Security=True
- SQL認証:
User ID=yourUsername;Password=yourPassword;Encrypt=True;TrustServerCertificate=True
2. DataTableにデータを読み込む
SqlDataAdapterを利用してクエリを実行し、DataTableに結果を格納します。
using System.Data;
using Microsoft.Data.SqlClient;
DataTable dataTable = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
string query = "SELECT * FROM Employees";
using (SqlDataAdapter adapter = new SqlDataAdapter(query, conn))
{
adapter.Fill(dataTable);
}
}
3. Spire.XLSでExcelにエクスポートする
using Spire.Xls;
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
Worksheet sheet = workbook.Worksheets.Add("Employees");
// 1行1列目からDataTableのデータを挿入(列名も含む)
sheet.InsertDataTable(dataTable, true, 1, 1);
// Excel xlsx形式で保存
workbook.SaveToFile("Employees.xlsx", ExcelVersion.Version2013);
主なメソッド:
InsertDataTable(DataTable table, bool columnHeaders, int firstRow, int firstColumn)
columnHeaders=true
:列名を1行目に出力firstRow
/firstColumn
:データの開始位置(1ベース)
SaveToFile:
.xlsx
、.xls
、.csv
などの形式で保存可能。ストリームへの保存も対応
Excelの書式を整える(任意だが推奨)
エクスポート後、見やすくするために以下のように書式設定が可能です。
// ヘッダー行のスタイル
sheet.Rows[0].Style.Font.IsBold = true;
sheet.Rows[0].Style.Font.Size = 14;
sheet.Rows[0].Style.HorizontalAlignment = HorizontalAlignType.Center;
sheet.Rows[0].Style.Color = System.Drawing.Color.LightGray;
// データ行のスタイル
for (int i = 1; i < sheet.Rows.Count(); i++)
{
var dataRow = sheet.Rows[i];
dataRow.Style.Font.Size = 12;
dataRow.Style.HorizontalAlignment = HorizontalAlignType.Left;
}
// 全体のフォント設定
sheet.AllocatedRange.Style.Font.FontName = "Microsoft YaHei";
// 枠線追加
sheet.AllocatedRange.BorderAround(LineStyleType.Thin, System.Drawing.Color.Black);
sheet.AllocatedRange.BorderInside(LineStyleType.Medium, System.Drawing.Color.Black);
// 列幅自動調整
sheet.AllocatedRange.AutoFitColumns();
数値フォーマットの詳細は:C#でExcelの数値フォーマットを設定する方法を参照してください。
その他のデータ取得方法
DataTable以外にも、以下の方法でデータを取得できます。
Entity Frameworkの利用
var employees = dbContext.Employees.ToList();
その後、コレクションをDataTableに変換するか、1行ずつExcelに書き込みます。
ストアドプロシージャの呼び出し
SqlCommand cmd = new SqlCommand("GetEmployees", conn); cmd.CommandType = CommandType.StoredProcedure;
SQLite / MySQL / Oracleの利用 接続タイプとドライバ(
Microsoft.Data.Sqlite
、MySql.Data
など)を変更するだけで、他は同じロジックでエクスポート可能。
Excelからデータベースへのインポートが必要な場合は、Excelとデータベース間のデータインポート/エクスポートを参照してください。
よくある問題と対処方法
問題 | 主な原因と解決策 |
---|---|
Excelファイルが空 | エクスポート前にDataTable に正しくデータが格納されているか確認 |
ファイルが保存できない | 保存先のパスが存在し、書き込み権限があるか確認 |
データベースに接続できない | サーバーが起動しているか、接続文字列が正しいか確認 |
特殊文字が文字化けする | データベースの列型をNVARCHAR にし、ExcelではUnicode対応フォントを使用 |
認証エラー | Windows認証はIntegrated Security=True 、SQL認証はユーザー名とパスワードを指定 |
まとめ
Spire.XLS for .NETを使えば、C#からデータベースのデータを迅速にExcelにエクスポートできます。Microsoft Officeのインストールは不要で、大量データ、書式設定、複数形式のファイル出力にも対応しています。
この方法は、スケジュール実行、バックグラウンドサービス、Webアプリケーションなどで、自動的なデータエクスポートや配信に活用できます。
全機能を試したい場合は無料の一時ライセンス申請をご利用ください。小規模プロジェクトにはFree Spire.XLS for .NETでも基本機能を利用可能です。
FAQ
Q:C#でSQLデータをExcelにエクスポートする方法は?
A:SqlConnection
でデータをDataTable
に読み込み、Spire.XLSのInsertDataTable()
を呼び出します。
Q:SQLiteやMySQLのデータもエクスポートできますか?
A:可能です。データベースドライバと接続文字列を変更してください。
Q:Excelのインストールは必要ですか?
A:不要です。Spire.XLSは独立したExcel処理ライブラリです。
Q:複数のテーブルを1つのExcelに出力できますか?
A:できます。ワークシートを複数作成し、それぞれにデータを挿入してください。