C# による Excel ファイルの生成は、レポートシステムの構築、構造化データの出力、Excel ベースの業務自動化において非常に一般的な作業です。デスクトップアプリ、ASP.NET Core Web API、クロスプラットフォームアプリなど、どのような .NET プロジェクトでも、コードで .xlsx ファイルを生成することで、データ処理と連携を大幅に効率化できます。 本記事では、Spire.XLS for .NET(Excel を操作できる単体のライブラリ)を使用して、.NET 環境で Excel ファイルを作成する方法を紹介します。デスクトップアプリ、ASP.NET Web サービス、バックグラウンド処理など、さまざまな場面で活用可能です。ワークブックの新規作成、DataTable のエクスポート、サーバーサイドでの生成、書式や数式の適用といった主要機能を、実用的なコード例とともに解説します。 目次 開発環境の準備 C# で Excel ファイルの新規作成 C# で DataTable を Excel に出力 C# で Excel に書式設定と数式を適用 ASP.NET Core で Excel ファイルを生成 ASP.NET Web Forms で Excel ファイルを生成 よくある質問(FAQ) まとめ 開発環境の準備 Spire.XLS for .NET は、Microsoft Office をインストールせずに .xls や .xlsx ファイルをコードのみで作成できる軽量なライブラリです。COM 依存もないため、Web サーバーやクラウドアプリ、マイクロサービス環境に最適です。 NuGet パッケージマネージャーから簡単に導入できます: Install-Package Spire.XLS 軽量用途には無料版の Free Spire.XLS for .NET も利用可能です: Install-Package FreeSpire.XLS C# で Excel ファイルの新規作成 小規模なデータ出力やテンプレートの生成には、C# コードで Excel ファイルを新規作成するのが効率的です。レイアウトや内容を柔軟に制御できます。 以下は、テキストと数値を含む基本的なワークシートを作成する例です: using Spire.Xls; // 新しいワークブックとワークシートを作成 Workbook workbook = new Workbook(); Worksheet sheet = workbook.Worksheets[0]; sheet.Name = "概要"; // ヘッダーとデータを入力 // セル名でアクセス sheet.Range["A1"].Text = "従業員"; sheet.Range["B1"].Text = "部署"; sheet.Range["C1"].Text = "給与"; // 行と列でアクセス sheet.Range[2, 1].Text = "山田太郎"; sheet.Range[2, 2].Text = "人事部"; sheet.Range[2, 3].NumberValue = 650000; sheet.Range[3, 1].Text = "佐藤花子"; sheet.Range[3, 2].Text = "情報システム部"; sheet.Range[3, 3].NumberValue = 720000; // スタイルを適用 CellStyle headerStyle = workbook.Styles.Add("Header"); headerStyle.Font.IsBold = true; sheet.Range["A1:C1"].Style = headerStyle; sheet.Range.Style.Font.FontName = "Yu Gothic UI"; // 列の幅を自動調整 sheet.Range.AutoFitColumns(); // ファイルを保存 workbook.SaveToFile("BasicExcel.xlsx", ExcelVersion.Version2016); workbook.Dispose(); 生成されたExcelファイル: この方法は Excel がインストールされていない環境でも動作し、簡単なデータ出力や設定ファイルの作成に最適です。 C# で DataTable を Excel に出力 データベースや API からの取得結果をそのまま Excel に出力したい場合、DataTable を使うのが一般的です。Spire.XLS を使えば、1 行ずつループすることなく、構造化されたデータをワークシートに簡単に取り込めます。 以下は、DataTable の内容をワークシートに取り込むサンプルです: using System.Data; using Spire.Xls; // データテーブルを作成(シミュレーション) DataTable dt = new DataTable("商品一覧"); dt.Columns.Add("商品名", typeof(string)); dt.Columns.Add("価格", typeof(double)); dt.Columns.Add("在庫数", typeof(int)); dt.Rows.Add("ノートパソコン", 129800, 20); dt.Rows.Add("モニター", 19800, 50); dt.Rows.Add("マウス", 2480, 150); // Excel にインポート Workbook workbook = new Workbook(); Worksheet sheet = workbook.Worksheets[0]; sheet.Name = "在庫管理"; sheet.InsertDataTable(dt, true, 1, 1); // 列幅を調整 sheet.AllocatedRange.ColumnWidth = 15; // ファイルを保存 workbook.SaveToFile("InventoryReport.xlsx", ExcelVersion.Version2016); workbook.Dispose(); 生成されたExcelファイル: この手法は、在庫リスト、売上レポート、分析結果などの出力に広く活用されています。 関連情報:DataTable と Excel の相互変換方法(C#) C# で Excel に書式設定と数式を適用 見やすくプロフェッショナルな Excel ファイルを作成するためには、データの出力に加えて、セルの書式設定や数式の挿入も重要です。C# と Spire.XLS を使えば、文字の色・太字・罫線・通貨形式・計算式などを自由に設定できます。 以下の例では、ヘッダー行のスタイル設定、通貨形式の適用、計算式の挿入、交互に背景色を変える処理を紹介しています: using Spire.Xls; using System.Drawing; Workbook workbook = new Workbook(); Worksheet sheet = workbook.Worksheets[0]; sheet.Name = "売上レポート"; // ヘッダーラベルを設定 sheet.Range["A1"].Text = "商品名"; sheet.Range["B1"].Text = "単価"; sheet.Range["C1"].Text = "数量"; sheet.Range["D1"].Text = "合計"; // サンプルデータを追加 string[,] items = { { "ボールペン", "150", "10" }, { "ノート", "375", "5" }, { "消しゴム", "99", "20" } }; for (int i = 0; i < items.GetLength(0); i++) { int row = i + 2; sheet.Range[$"A{row}"].Text = items[i, 0]; sheet.Range[$"B{row}"].NumberValue = double.Parse(items[i, 1]); sheet.Range[$"C{row}"].NumberValue = double.Parse(items[i, 2]); sheet.Range[$"D{row}"].Formula = $"=B{row}*C{row}"; } // スタイル:ヘッダー行 CellStyle headerStyle = workbook.Styles.Add("HeaderStyle"); headerStyle.Font.IsBold = true; headerStyle.Font.Color = Color.White; headerStyle.Font.Size = 12; headerStyle.Font.FontName = "Yu Gothic UI"; headerStyle.KnownColor = ExcelColors.DarkBlue; headerStyle.HorizontalAlignment = HorizontalAlignType.Center; headerStyle.VerticalAlignment = VerticalAlignType.Center; headerStyle.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thick; headerStyle.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thick; sheet.Range["A1:D1"].Style = headerStyle; // スタイル:データセル CellStyle dataStyle = workbook.Styles.Add("DataStyle"); dataStyle.Font.FontName = "Yu Gothic UI"; dataStyle.NumberFormat = ""¥"#,##0"; // 円形式で小数なし dataStyle.HorizontalAlignment = HorizontalAlignType.Right; dataStyle.VerticalAlignment = VerticalAlignType.Center; dataStyle.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin; dataStyle.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin; // 単価・数量・合計列にスタイルを適用 sheet.Range["B2:D4"].Style = dataStyle; // 任意:交互行の背景色を変更して読みやすく for (int r = 2; r <= 4; r++) { if (r % 2 == 0) sheet.Range[$"A{r}:D{r}"].Style.KnownColor = ExcelColors.LightYellow; } // 列幅と行の高さを調整 sheet.AllocatedRange.ColumnWidth = 10; sheet.AllocatedRange.RowHeight = 20; // ファイルを保存 workbook.SaveToFile("styled.xlsx", FileFormat.Version2016); workbook.Dispose(); 作成されたExcelファイル: 売上明細や会計帳簿など、視認性と自動集計が求められるシーンに最適です。 より高度な数値フォーマットについては、こちらをご覧ください: Excel セルの数値フォーマットを設定する方法(C#/VB.NET) ASP.NET Core で Excel ファイルを生成 ASP.NET Core(.NET 6/7/8)を使用した Web アプリでは、ダッシュボードや管理画面で Excel 出力機能がよく利用されます。 以下のサンプルでは、Razor Pages を使用してサーバー側で Excel ファイルを生成し、HTTP 応答としてダウンロードさせる方法を紹介しています: using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Spire.Xls; using System.Data; public class ExportModel : PageModel { public IActionResult OnGet() { // 専門的なデータをシミュレート:プロジェクト進捗レポート DataTable dt = new DataTable("プロジェクト進捗"); dt.Columns.Add("プロジェクトID", typeof(string)); dt.Columns.Add("プロジェクト名", typeof(string)); dt.Columns.Add("担当者", typeof(string)); dt.Columns.Add("開始日", typeof(DateTime)); dt.Columns.Add("予定完了日", typeof(DateTime)); dt.Columns.Add("進捗状況", typeof(string)); dt.Columns.Add("ステータス", typeof(string)); dt.Rows.Add("PRJ001", "スマート倉庫システム", "張 強", new DateTime(2024, 3, 1), new DateTime(2024, 9, 30), "65%", "進行中"); dt.Rows.Add("PRJ002", "企業ポータルサイトのアップグレード", "李 華", new DateTime(2024, 5, 10), new DateTime(2024, 7, 15), "100%", "完了"); dt.Rows.Add("PRJ003", "データガバナンスプラットフォーム構築", "王 敏", new DateTime(2024, 6, 1), new DateTime(2024, 12, 31), "30%", "遅延"); // Excel ワークブックとワークシートを作成 Workbook workbook = new Workbook(); Worksheet sheet = workbook.Worksheets[0]; sheet.Name = "プロジェクト進捗レポート"; // テーブル(ヘッダー付き)を挿入 sheet.InsertDataTable(dt, true, 1, 1); // ヘッダースタイルを設定 CellStyle headerStyle = workbook.Styles.Add("HeaderStyle"); headerStyle.Font.IsBold = true; headerStyle.HorizontalAlignment = HorizontalAlignType.Center; headerStyle.VerticalAlignment = VerticalAlignType.Center; sheet.Rows[0].Style = headerStyle; sheet.Range.Style.Font.FontName = "Yu Gothic UI"; // 列幅を自動調整 sheet.AllocatedRange.AutoFitColumns(); // メモリストリームに保存 using var stream = new MemoryStream(); workbook.SaveToStream(stream, FileFormat.Version2016); stream.Position = 0; // ファイルを返す return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "プロジェクト進捗レポート.xlsx"); } } エクスポートされたExcelファイル: このアプローチは、社内ポータル、業務ツール、データ出力 API などに幅広く活用できます。 ✅ 対応:ASP.NET Core 3.1、.NET 5、6、7、8 ✅ 対象:Razor Pages、MVC、API エンドポイントなど ASP.NET Web Forms で Excel ファイルを生成 従来の ASP.NET Web Forms を利用している場合でも、Spire.XLS を使えばサーバーサイドで Excel ファイルを動的に生成し、クライアントに直接ダウンロードさせることが可能です。ファイルをディスクに保存する必要はありません。 以下は Web Forms アプリでの実装例です: using Spire.Xls; using System; using System.IO; namespace YourNamespace { public partial class Default : System.Web.UI.Page { protected void btnExport_Click(object sender, EventArgs e) { // Excel ファイルを作成し、ダウンロードとして出力 Workbook workbook = new Workbook(); Worksheet sheet = workbook.Worksheets[0]; sheet.Name = "ユーザー一覧"; // ヘッダー string[] headers = { "ユーザーID", "氏名", "所属部署", "入社日" }; for (int i = 0; i < headers.Length; i++) { sheet.Range[1, i + 1].Text = headers[i]; sheet.Range[1, i + 1].Style.Font.IsBold = true; } // サンプルデータ string[,] data = { { "U001", "佐藤 美咲", "人事部", "2023-01-15" }, { "U002", "山本 健太", "情報システム部", "2022-11-03" } }; // データを入力 for (int r = 0; r < data.GetLength(0); r++) for (int c = 0; c < data.GetLength(1); c++) sheet.Range[r + 2, c + 1].Text = data[r, c]; // 列幅を自動調整 sheet.Range.Style.Font.FontName = "Yu Gothic UI"; sheet.AllocatedRange.AutoFitColumns(); // ブラウザでダウンロードさせる using (MemoryStream ms = new MemoryStream()) { workbook.SaveToStream(ms, FileFormat.Version2016); byte[] bytes = ms.ToArray(); Response.Clear(); Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("Content-Disposition", "attachment; filename=ユーザー一覧.xlsx"); Response.BinaryWrite(bytes); Response.End(); } } } } エクスポートされたExcelファイル: Excel ファイルを即時出力できるため、社内システムや業務アプリに便利な仕組みです。 よくある質問(FAQ) Q. C# で Excel ファイルを作成するには? Spire.XLS などのライブラリを使うことで、Office をインストールせずに Excel ファイルを作成・保存できます。 Q. データを Excel にエクスポートするには? DataTable をワークシートに読み込んで保存すれば簡単にエクスポートできます。列ヘッダーや書式も自動設定されます。 Q. ASP.NET で Excel ファイルを生成するには? ASP.NET Core ではファイルをメモリ上で作成し、HTTP 応答として返します。Web Forms では Response.BinaryWrite() を使用して出力できます。 Q. Spire.XLS は .NET Core に対応していますか? はい。Spire.XLS は .NET Core 3.1、.NET 5、.NET 6、.NET 7、.NET 8 に対応しており、クロスプラットフォーム開発にも利用できます。 まとめ Spire.XLS for .NET を使用すれば、C# で簡単かつ柔軟に Excel ファイルを作成できます。デスクトップアプリ、ASP.NET Core、Web Forms、バッチ処理など、あらゆる .NET 環境に対応しています。 DataTable のエクスポート、書式付きレポートの生成、自動化された出力処理など、本記事で紹介した方法を活用すれば、Excel 出力機能をすぐに実装できます。 👉 無料の一時ライセンスを申請 して、すべての機能を試用し、評価版の制限を解除しましょう。