C# で DataTable を Excel ファイルにエクスポートする 作業は、レポートの生成、ログの出力、システム間のデータ共有など、.NET 開発において非常によくあるニーズです。スタンドアロン型のライブラリを使用することで、複雑なセットアップや外部依存を必要とせず、DataTable のデータを迅速かつ柔軟に Excel ファイルに出力できます。
この記事では、Spire.XLS for .NET を使用して、C# で DataTable を Excel(.xlsx / .xls)にエクスポートし、書式設定を適用して見やすいファイルに仕上げる方法を段階的に解説します。
目次:
- Spire.XLS のインストールと設定
- 手順解説:DataTable を Excel にエクスポート
- 出力された Excel ファイルの書式設定
- よくある問題と対処法
- まとめ
- よくある質問(FAQ)
Spire.XLS のインストールと設定
まずは、プロジェクトに Spire.XLS for .NET を追加してください。
NuGet でインストールするには以下のコマンドを使用します:
Install-Package Spire.XLS
Spire.XLS は、.NET Framework、.NET Core、.NET 6/7+、ASP.NET に対応しており、Microsoft Office のインストールは不要です。
手順解説:C# で DataTable を Excel に出力する
以下の手順では、Spire.XLS を用いて DataTable を Excel ファイルに変換するプロセスを、データ準備から保存、Web 出力、書式設定まで順を追って紹介します。
ステップ1:サンプル DataTable を作成
まず、以下のようなカラムを持つ DataTable を用意します:
// データテーブルを作成
DataTable dt = new DataTable("社員情報");
// 列を追加
dt.Columns.Add("社員番号", typeof(int));
dt.Columns.Add("氏名", typeof(string));
dt.Columns.Add("部署", typeof(string));
dt.Columns.Add("入社日", typeof(DateTime));
dt.Columns.Add("給与", typeof(double));
dt.Columns.Add("正社員", typeof(bool));
dt.Columns.Add("賞与率", typeof(decimal));
// データ行を追加
dt.Rows.Add(1001, "佐藤 大輔", "人事部", new DateTime(2021, 5, 10), 55000.5, true, 0.05m);
dt.Rows.Add(1002, "鈴木 美咲", "技術部", new DateTime(2020, 11, 23), 72000.0, false, 0.03m);
dt.Rows.Add(1003, "高橋 健太", "経理部", new DateTime(2019, 8, 15), 63000.75, true, 0.07m);
dt.Rows.Add(1004, "田中 優子", "マーケティング部", new DateTime(2022, 3, 8), 48800.0, true, 0.06m);
ここではサンプルデータを使用していますが、実際には任意の DataTable をバインドできます。
ステップ2:DataTable をインポートして Excel ファイルとして保存
次に、ワークブックを初期化し、DataTable をワークシートに挿入し、ファイルを保存します。
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
Worksheet sheet = workbook.Worksheets.Add(dt.TableName);
// A1 セルからデータを挿入
sheet.InsertDataTable(dt, true, 1, 1);
// XLSX 形式で保存(推奨)
workbook.SaveToFile(dt.TableName + ".xlsx", FileFormat.Version2016);
// 旧形式(.xls)で保存
workbook.SaveToFile(dt.TableName + ".xls", FileFormat.Version97to2003);
補足:
- Workbook は Excel 全体のコンテナです。
- InsertDataTable() は DataTable の内容をセルにマッピングします。
- SaveToFile() で Excel ファイルとして出力できます。
出力結果のイメージ:
ASP.NET で Excel をストリームとして出力
Web アプリケーションでは、ファイルをディスクに保存せず直接ダウンロードさせたい場合があります。
MemoryStream stream = new MemoryStream();
workbook.SaveToStream(stream, FileFormat.Version2013);
stream.Position = 0;
この MemoryStream を ASP.NET のコントローラで返すことで、ブラウザで Excel ファイルのダウンロードが開始されます。
関連記事:C# で Excel ファイルを作成・操作する方法
出力された Excel ファイルの書式設定
より見やすくプロフェッショナルな Excel ファイルを作るために、書式設定を施すことをおすすめします。
// ヘッダー行のスタイル
CellRange header = sheet.Rows[0];
header.Style.Font.IsBold = true;
header.Style.Font.FontName = "Yu Gothic";
header.Style.Font.Size = 13;
header.Style.Color = Color.LightGray;
header.Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thick;
// データ行のスタイル
for (int i = 1; i < sheet.Rows.Length; i++)
{
CellRange dataRow = sheet.Rows[i];
dataRow.Style.Font.FontName = "Yu Mincho";
dataRow.Style.Font.Size = 11;
}
sheet.Range.BorderInside(LineStyleType.Thin, Color.Black);
// 日付列の書式設定
CellRange dateColumn = sheet.Range[2, 4, sheet.Rows.Length + 1, 4];
dateColumn.Style.NumberFormat = "yyyy-mm-dd";
// 列幅を自動調整
sheet.AllocatedRange.AutoFitColumns();
主要プロパティとメソッド:
- Style: フォントや色、罫線、数値形式などを設定
- AutoFitColumns(): 列幅を自動調整
- NumberFormat: 日付や数値の表示形式を設定
- BorderInside(): 表の読みやすさを高める内部罫線を追加
書式設定後のイメージ:
詳細な数値フォーマット設定はこちら:
Spire.XLS で Excel の数値フォーマットを C# で設定する方法
よくある問題と対処法
問題 | 解決方法 |
---|---|
ファイルが開けない/破損エラーが出る | ストリームの正しいクローズと拡張子の整合性を確認 |
特殊文字や日本語が文字化けする | UTF-8 エンコードの使用と対応フォントの設定を確認 |
列幅が狭すぎる | AutoFitColumns() で自動調整、または ColumnWidth を手動設定 |
まとめ
C# で DataTable を Excel にエクスポートする作業は、Spire.XLS を使えば非常に簡単です。.xls / .xlsx 形式のファイルを生成でき、Office のインストールも不要。デスクトップ/Web アプリを問わず、実用的で見栄えのよい Excel 出力が実現できます。
すべての機能を試したい場合は、無料の一時ライセンス を申請してください。
よくある質問(FAQ)
Q1:C# で DataTable を Excel に変換するには?
Spire.XLS の InsertDataTable() を使用してワークシートに読み込み、SaveToFile() でファイルとして保存できます。
Q2:無料で使える Excel エクスポートライブラリはありますか?
はい。Free Spire.XLS for .NET は、Microsoft Office をインストールせずに、Excel ファイルの作成と出力ができる無料ライブラリです。
Q3:ASP.NET で Excel を出力できますか?
可能です。コントローラで Workbook を生成し、MemoryStream として返すことで、ブラウザで直接ダウンロード可能です。
Q4:.xlsx と .xls の違いは?
.xlsx は Office 2007 以降対応の新形式で、.xls は古い Excel 97〜2003 用の形式です(最大行数に制限あり)。