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 出力機能をすぐに実装できます。
👉 無料の一時ライセンスを申請 して、すべての機能を試用し、評価版の制限を解除しましょう。