日常業務において、アプリケーション内で生成された DataTable の内容を Excel ファイルとして出力する必要がある場面は少なくありません。CSVとは異なり、Excelはセルのフォント、色、枠線、日付形式などを柔軟に制御できるため、見た目にも分かりやすいデータ出力が可能です。
この記事では、C#環境において C# を使用し、DataTable を書式付きでExcelファイルにエクスポートする手順を紹介します。基本的なデータの挿入から、スタイルの設定、列幅の自動調整までを段階的に解説します。
この記事には以下の内容が含まれます:
- DataTable データの作成または取得
- C#で DataTable を Excel に挿入し、ファイルまたはストリームとして保存する
- エクスポートした Excel ファイルのフォーマットを美しく設定する
この記事で説明する方法には、Free Spire.XLS for .NET が必要です。NuGet を使用してインストールできます:Install-Package FreeSpire.XLS。
DataTableの作成または取得
まずは、Excelに出力したいデータを DataTable 形式で用意します。以下の例では、社員情報を持つサンプルの DataTable を作成します。実際の開発では、データベースや業務処理から生成された DataTable をそのまま使うこともあります。
DataTable dt = new DataTable("Employees");
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Department", typeof(string));
dt.Columns.Add("Join Date", typeof(DateTime));
dt.Columns.Add("Salary", typeof(double));
dt.Columns.Add("Full-Time", typeof(bool));
dt.Columns.Add("Bonus Rate", typeof(decimal));
dt.Rows.Add(2001, "Ethan Brown", "Operations", new DateTime(2021, 4, 12), 60000.0, true, 0.04m);
dt.Rows.Add(2002, "Grace Lee", "Engineering", new DateTime(2019, 7, 23), 82000.5, true, 0.06m);
dt.Rows.Add(2003, "Liam Wilson", "Accounting", new DateTime(2020, 2, 14), 56000.0, false, 0.02m);
dt.Rows.Add(2004, "Olivia Davis", "Sales", new DateTime(2022, 10, 3), 49000.75, true, 0.05m);
dt.Rows.Add(2005, "Noah Martinez", "Engineering", new DateTime(2018, 5, 17), 91000.0, true, 0.07m);
dt.Rows.Add(2006, "Sophia Johnson", "Human Resources", new DateTime(2023, 3, 6), 47000.0, false, 0.03m);
このように列を定義し、型を指定した上でデータを追加します。DateTime や decimal のような型も、Spire.XLS を使えばExcelに正しく出力可能です。
Excelファイルへの挿入と保存(ストリーム保存対応)
次に、Spire.XLS を使って Excel ワークブックを作成し、DataTable の内容をワークシートに挿入します。デフォルトでは、列ヘッダーも含めて挿入され、型に応じた表示が自動的に行われます。
using Spire.Xls;
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
Worksheet sheet = workbook.Worksheets.Add(dt.TableName);
sheet.InsertDataTable(dt, true, 1, 1);
挿入位置は (1, 1)、すなわちA1セルから始まるよう指定しています。第二引数の true は列名(ヘッダー)を含めることを意味します。
作成したExcelファイルは、SaveToFile メソッドを使ってディスク上に保存できます。また、SaveToStream を使えばストリームに出力でき、Webアプリケーションなどでも柔軟に扱えます:
// ファイルとして保存
workbook.SaveToFile("output.xlsx", ExcelVersion.Version2013);
workbook.SaveToFile(dt.TableName + ".xls", FileFormat.Version97to2003);
// メモリストリームに保存(例:Webアプリ用途)
MemoryStream stream = new MemoryStream();
workbook.SaveToStream(stream, ExcelVersion.Version2013);
表の書式設定(ヘッダー、日付、列幅など)
そのまま出力しても機能的には問題ありませんが、可読性を高めるには表の見た目を整えることが重要です。ここでは、ヘッダー行にスタイルを適用し、日付列に表示形式を指定し、列幅を自動調整する方法を紹介します。
CellStyle headerStyle = workbook.Styles.Add("HeaderStyle");
headerStyle.Color = Color.LightGray;
headerStyle.Font.IsBold = true;
headerStyle.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;
CellRange header = sheet.Rows[0];
header.CellStyleName = "HeaderStyle";
このように、スタイルを作成してヘッダー行に一括適用できます。背景色やフォントの太さ、下線などを自由に設定可能です。
次に、日付列(この例では4列目)に対して、"yyyy-mm-dd" の表示形式を指定します:
CellRange dateColumn = sheet.Range["D2:D5"];
dateColumn.NumberFormat = "yyyy-mm-dd";
また、すべての列幅を内容に応じて自動調整するには、次のようにします:
sheet.AllocatedRange.AutoFitColumns();
この操作により、文字列や数字が切れずに表示され、見た目が格段に良くなります。
出力結果:
まとめ
この記事では、C# で DataTable を Excel ファイルにエクスポートし、さらに書式を設定して見やすく整える方法を解説しました。Spire.XLS for .NET を活用すれば、書式を含む実用的なExcelレポートを簡単に生成できます。保存方法もファイル出力とストリーム出力の両方に対応しており、Web・デスクトップ双方のシステムに応用可能です。
データの可視化や共有が求められる場面において、見た目にも整ったExcel出力は、業務効率と印象の向上に繋がります。
Excelファイルの処理に関するさらに多くのテクニックについては、Spire.XLS for .NETの公式チュートリアルをご確認ください。

