Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
55 分 42 秒
Excelファイルの作成と操作は、レポーティングツール、データエクスポート、ユーザー入力インターフェースを構築するC#開発者にとって重要なスキルです。 この記事では、Tim Coreyがビデオ"Creating Excel files in C#"で提供した詳細なウォークスルーを深く掘り下げます。彼は、C#を使ってExcelファイルを作成し、フォーマットし、データを読み取る方法を実演しています。
リストから新しいExcelワークブックを作成したり、Excelワークシートのセルをフォーマットしたり、アプリケーションに構造化データを読み込んだりする方法をお探しの場合でも、Timの例は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にアップグレードしています。
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");Dim file As New FileInfo("C:\demos\youtubedemo.xlsx")このファイルは最初は存在しません-プログラムによって動的に作成されます。
Excel ワークシートに入力するために、Tim は以下のプロパティを持つ単純な PersonModel クラスを定義します:
int ID
文字列 FirstName
文字列 LastName
彼はヘルパーメソッドGetSetupData()を使用して、Tim Corey、Sue Storm、Jane Smithのようなサンプルデータを入力したList<PersonModel>を返します。
現代の開発では、UIスレッドをブロックすることは容認できません。 そのため、Timは非同期メソッドを定義しています:
static async Task SaveExcelFile(List<PersonModel> people, FileInfo file)Private Shared Async Function SaveExcelFile(people As List(Of PersonModel), file As FileInfo) As TaskExcelに書き込む前に、ファイルが存在するかどうかをチェックし、名前の衝突を避けるために削除する。
if (file.Exists) file.Delete();If file.Exists Then file.Delete()Timは、適切な廃棄を確実にするために、usingブロック内でEPPlus ExcelPackageオブジェクトを使用しています:
using var package = new ExcelPackage(file);Using package As New ExcelPackage(file)
End Using彼はワークブックに新しいワークシートを追加します:
var ws = package.Workbook.Worksheets.Add("MainReport");Dim ws = package.Workbook.Worksheets.Add("MainReport")LoadFromCollectionを使用して、セル "A2 "から始まる人のリストを挿入する:
ws.Cells["A2"].LoadFromCollection(people, true);ws.Cells("A2").LoadFromCollection(people, True)次に、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.Centerws.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.Centerws.Column(3).Width = 20;ws.Column(3).Width = 20このセクションでは、次のような高度な書式設定を示します:
マージされたセル
フォントスタイル
背景色
行/列の配置
幅の調整
これらは、典型的なMS Office Excelフォーマット機能を模倣しています。
さて、Excelにデータを書き込んだので、次はそれをC#に読み戻す番です。
ティムがその方法を紹介します:
static async Task<List<PersonModel>> LoadExcelFile(FileInfo file)Private Shared Async Function LoadExcelFile(file As FileInfo) As Task(Of List(Of PersonModel))彼は行と列のカウンターを設定します:
int row = 3; // Skip title and header rows int col = 1;Dim row As Integer = 3 ' Skip title and header rows
Dim col As Integer = 1whileループを使って、空でないセルをチェックし、値を読み込む:
while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))While Not 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 = Integer.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<PersonModel> が入力され、返されます。
Tim は、返されたリストをループし、各エントリをコンソールに書き込みます:
foreach (var p in peopleFromExcel)
{
Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}");
}For Each p In peopleFromExcel
Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}")
Nextユーザー入力ツールとしてのエクセルの柔軟性を示すために、ティムは新しいレコード("ビル・スミス"、"メアリー・ホワイト")をエクセルファイルに直接手動で追加します。アプリを再実行すると、これらのエントリーはコードを変更することなくインポートされ、データ入力インターフェースとしてのエクセルの可能性を証明した。
ティムは、C# Excelソリューションの使用例を紹介します:
データベーステーブルのExcelへのエクスポート
エンドユーザーが入力したデータのインポート
Excelをレポートダッシュボードとして使用する
データ処理のための構造化ワークブックの作成
また、Microsoft.Office.Interop.Excelに頼ることなく、Excelがインストールされている必要があります。
Timは、プログラムで作成された.xlsxファイルは、Excelで開いて保存するまで、すべてのメタデータを含んでいないと説明しています。 そのため、実際のExcelアプリケーションで開くとファイルサイズが大きくなります。
また、EPPlusは洗練された堅牢なライブラリであり、以下の機能をサポートしています:
チャート
画像
スパークライン
数式
ページ設定
国境
セルフォーマット
C#でExcelファイルを作成することは、難しくも高くもありません。EPPlus Excelライブラリのおかげで、開発者はMS Officeを必要とせずに、機能豊富なExcelドキュメントをプログラムで作成することができます。ティム・コーリーが示すように、わずか数行のコードで以下のことが可能です:
エクセルファイルの作成
行と列の入力
スタイリング
データを読み返す
ユーザー向けのUIとしてExcelを使用
そのため、軽量なレポートツール、データのインポート/エクスポート、または単にユーザーがすでに知っているインターフェイスを提供するための素晴らしい選択肢となります。
今度プロジェクトを構築するときに Excel データを出力または消費する必要がある場合は、Tim Corey の video にあるサンプル コードを実装してみてください。
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy