フッターコンテンツにスキップ
Iron Academy Logo
C#を学ぶ
C#を学ぶ

その他のカテゴリー

C#でのExcelファイルの作成

Tim Corey
55 分 42 秒

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 にあるサンプル コードを実装してみてください。

Hero Worlddot related to C#でのExcelファイルの作成
Hero Affiliate related to C#でのExcelファイルの作成

好きなことを共有することで収入を増やす

.NET、C#、Java、Python、またはNode.jsを使用する開発者向けのコンテンツを作成しますか?あなたの専門知識を副収入に変えましょう!

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね