C#でのExcelファイルの作成
Excelファイルの作成と操作は、レポーティングツール、データエクスポート、ユーザー入力インターフェースを構築するC#開発者にとって重要なスキルです。 この記事では、Tim Coreyがビデオ"Creating Excel files in C#"で提供した詳細なウォークスルーを深く掘り下げます。彼は、C#を使ってExcelファイルを作成し、フォーマットし、データを読み取る方法を実演しています。
リストから新しいExcelワークブックを作成する、Excelワークシートのセルをフォーマットする、または構造化されたデータをアプリケーションに読み戻すなどを模索している場合、Timの例はC#でのExcelファイル生成の基本をカバーする実用的なチュートリアルとして役立ちます。
ティムのビデオを参照しながら、順を追って説明していきましょう。
はじめに:C#でExcelを使う理由
ティムはまず、Microsoft Excelがビジネスで最も重要なツールの1つであることを説明します。 Excelファイルはユーザーフレンドリーで汎用性が高く、データを表現するのに最適です。 C#でExcelファイルを作成することで、複雑なレポーティング・ソリューションの代用として、Excelをデフォルトのレポーティング・ツールとして使用できることを強調しています。
目標:C#を使用してExcelアプリケーションを作成し、データを入力し、いくつかの書式を適用し、そのExcelファイルから読み取る。
ソリューション エクスプローラーでプロジェクトを設定する
TimはVisual Studio 2019を開き、コンソールアプリケーション(.NET Core)を選択し、ソリューションにExcelDemoAppという名前を付けます。コンソールアプリを使用することで、Excel関連のコードに純粋に集中できる、クリーンで気が散らない環境を提供します。
オブジェクトのインスタンス化の簡略化など、C# 9の機能を活用するために、ターゲットフレームワークを.NET 5.0にアップグレードしています。
NuGetパッケージからEPPlusを追加する
Excelワークブックを作成するために、TimはNuGet Package Manager経由でEPPlusパッケージをインストールします。 EPPlusは.xlsxファイル(Open XML)で動作するExcelライブラリで、MS OfficeやExcel Interopを必要とせず、チャート、テーブル、スタイル、数式などExcelの全機能をサポートします。
注:EPPlusは非商用利用には無料ですが、商用利用にはライセンスが必要です。
彼は、ランタイムエラーを避けるために、必要な非商用ライセンスの承諾行をコードにコピーし、OfficeOpenXmlを使用して必要なものを追加します; ディレクティブを使用してください。
エクセル ファイルのパスを定義する
System.IO.FileInfoを使用して、Timはハードコードされたファイルパスを設定します:
var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");このファイルは最初は存在しません-プログラムによって動的に作成されます。
データモデルの作成
Excel ワークシートに入力するために、Tim は以下のプロパティを持つ単純な PersonModel クラスを定義します:
int ID
文字列 FirstName
- 文字列 LastName
彼はヘルパーメソッドGetSetupData()を使用して、Tim Corey、Sue Storm、Jane Smithのようなサンプルデータを入力したList
データを Excel ファイルに非同期で保存する
現代の開発では、UIスレッドをブロックすることは容認できません。 そのため、Timは非同期メソッドを定義しています:
static async Task SaveExcelFile(List<PersonModel> people, FileInfo file)static async Task SaveExcelFile(List<PersonModel> people, FileInfo file)Excelに書き込む前に、ファイルが存在するかどうかをチェックし、名前の衝突を避けるために削除する。
if (file.Exists) file.Delete();if (file.Exists) file.Delete();Excelワークシートの作成と書式設定
Timは、適切な廃棄を確実にするために、usingブロック内でEPPlus ExcelPackageオブジェクトを使用しています:
using var package = new ExcelPackage(file);using var package = new ExcelPackage(file);彼はワークブックに新しいワークシートを追加します:
var ws = package.Workbook.Worksheets.Add("MainReport");var ws = package.Workbook.Worksheets.Add("MainReport");データの読み込み
LoadFromCollectionを使用して、セル "A2 "から始まる人のリストを挿入する:
ws.Cells["A2"].LoadFromCollection(people, true);ws.Cells["A2"].LoadFromCollection(people, true);- trueは、ヘッダーが含まれていることを保証します("Id"、"FirstName"、"LastName "など)。
次に、AutoFitColumns() は列幅を自動的に調整します:
ws.Cells[ws.Dimension.Address].AutoFitColumns();ws.Cells[ws.Dimension.Address].AutoFitColumns();最後に、彼はExcelファイルを保存します:
await package.SaveAsync();await package.SaveAsync();エクセルのセルと行にスタイルを設定する
Excelファイルをより読みやすくするために、Timはスタイルを適用する方法を示しています:
タイトル行
ws.Cells["A1"].Value = "Our Cool Report";
ws.Cells["A1:C1"].Merge = true; ws.Row(1).Style.Font.Size = 24;
ws.Row(1).Style.Font.Color.SetColor(Color.Blue);
ws.Column(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;ws.Cells["A1"].Value = "Our Cool Report";
ws.Cells["A1:C1"].Merge = true; ws.Row(1).Style.Font.Size = 24;
ws.Row(1).Style.Font.Color.SetColor(Color.Blue);
ws.Column(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;ヘッダー行
ws.Row(2).Style.Font.Bold = true;
ws.Row(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;ws.Row(2).Style.Font.Bold = true;
ws.Row(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;カスタム列幅
ws.Column(3).Width = 20;ws.Column(3).Width = 20;このセクションでは、次のような高度な書式設定を示します:
マージされたセル
フォントスタイル
背景色
行/列の配置
- 幅の調整
これらは、典型的なMS Office Excelフォーマット機能を模倣しています。
C#でExcelファイルからデータを読み取る
さて、Excelにデータを書き込んだので、次はそれをC#に読み戻す番です。
ティムがその方法を紹介します:
static async Task<List<PersonModel>> LoadExcelFile(FileInfo file)static async Task<List<PersonModel>> LoadExcelFile(FileInfo file)彼は行と列のカウンターを設定します:
int row = 3; // Skip title and header rows int col = 1;int row = 3; // Skip title and header rows int col = 1;行をループする
whileループを使って、空でないセルをチェックし、値を読み込む:
while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))ループの中では、値が読み込まれ、解析されます:
p.Id = int.Parse(ws.Cells[row, col].Value.ToString());
p.FirstName = ws.Cells[row, col + 1].Value.ToString();
p.LastName = ws.Cells[row, col + 2].Value.ToString();p.Id = int.Parse(ws.Cells[row, col].Value.ToString());
p.FirstName = ws.Cells[row, col + 1].Value.ToString();
p.LastName = ws.Cells[row, col + 2].Value.ToString();List
インポートされたデータの検証
Tim は、返されたリストをループし、各エントリをコンソールに書き込みます:
foreach (var p in peopleFromExcel)
{
Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}");
}foreach (var p in peopleFromExcel)
{
Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}");
}ユーザー入力ツールとしてのエクセルの柔軟性を示すために、ティムは新しいレコード("ビル・スミス"、"メアリー・ホワイト")をエクセルファイルに直接手動で追加します。アプリを再実行すると、これらのエントリーはコードを変更することなくインポートされ、データ入力インターフェースとしてのエクセルの可能性を証明した。
実用的な使用例
ティムは、C# Excelソリューションの使用例を紹介します:
データベーステーブルのExcelへのエクスポート
エンドユーザーが入力したデータのインポート
Excelをレポートダッシュボードとして使用する
- データ処理のための構造化ワークブックの作成
また、Microsoft.Office.Interop.Excelに頼ることなく、Excelがインストールされている必要があります。
EPPlusとExcelファイルに関する最終的な注意事項
Timは、プログラムで作成された.xlsxファイルは、Excelで開いて保存するまで、すべてのメタデータを含んでいないと説明しています。 そのため、実際のExcelアプリケーションで開くとファイルサイズが大きくなります。
また、EPPlusは洗練された堅牢なライブラリであり、以下の機能をサポートしています:
チャート
画像
スパークライン
数式
ページ設定
国境
- セルフォーマット
結論
C#でExcelファイルを作成することは、難しくも高くもありません。EPPlus Excelライブラリのおかげで、開発者はMS Officeを必要とせずに、機能豊富なExcelドキュメントをプログラムで作成することができます。ティム・コーリーが示すように、わずか数行のコードで以下のことが可能です:
エクセルファイルの作成
行と列の入力
スタイリング
データを読み返す
- ユーザー向けのUIとしてExcelを使用
そのため、軽量なレポートツール、データのインポート/エクスポート、または単にユーザーがすでに知っているインターフェイスを提供するための素晴らしい選択肢となります。
今度プロジェクトを構築するときに Excel データを出力または消費する必要がある場合は、Tim Corey の video にあるサンプル コードを実装してみてください。

