Categories: Cシャープ

C#でExcelファイルを読み込む方法を徹底解説|初心者向けにわかりやすく解説

C#を使ってExcelファイルを読み込む方法は、業務アプリケーション開発やデータ処理の現場で非常に重宝されます。手動でExcelを開かずに、プログラムから自動的にデータを取得できれば、作業効率は飛躍的に向上します。この記事では、C#でExcelファイル(.xlsx形式)を読み込む基本的な方法から、よく使われるライブラリ「ClosedXML」や「Microsoft Interop Excel」の使い方、さらには注意点や実用例までを詳しく解説します。初心者の方にもわかりやすく、実際のコード付きで紹介していきます。


C#でExcelを扱う主な方法

C#でExcelファイルを読み込む方法はいくつかあります。代表的な方法は以下の3つです。

  • Microsoft.Office.Interop.Excel を使う方法
  • ClosedXMLライブラリを使う方法
  • EPPlusライブラリを使う方法

この中で最も扱いやすく、現在主流となっているのが ClosedXML です。この記事では主にClosedXMLを使った方法を中心に解説し、最後にInteropを使う場合の注意点にも触れます。


ClosedXMLとは?インストール方法と準備

ClosedXML は、.NET環境でExcelファイル(xlsx形式)を簡単に読み書きできるライブラリです。Microsoft Officeがインストールされていなくても動作するのが大きなメリットです。

インストール手順(Visual Studio)

  1. Visual Studioでプロジェクトを開く
  2. パッケージマネージャーコンソールを開く
  3. 以下のコマンドを実行
Install-Package ClosedXML

あるいは、NuGetパッケージマネージャーから「ClosedXML」で検索してインストールしてもOKです。


Excelファイルを読み込む基本コード(ClosedXML使用)

以下のコードは、指定されたExcelファイルの1行目から10行目までを読み込むサンプルです。

using System;
using ClosedXML.Excel;

class Program
{
static void Main()
{
string filePath = @"C:\Users\SampleUser\Documents\sample.xlsx";

using (var workbook = new XLWorkbook(filePath))
{
var worksheet = workbook.Worksheet(1); // 最初のシート
for (int row = 1; row <= 10; row++)
{
string value = worksheet.Cell(row, 1).GetValue<string>();
Console.WriteLine($"Row {row}: {value}");
}
}
}
}

このコードでは、1列目のセルデータを10行分読み取り、コンソールに出力しています。


特定のセルや範囲を読み込む

特定のセルを指定するには、以下のように記述します。

string value = worksheet.Cell("B2").GetValue<string>();

範囲でまとめて読み込む場合:

var range = worksheet.Range("A1:C5");

foreach (var cell in range.Cells())
{
Console.WriteLine(cell.GetValue<string>());
}

これにより、データの一覧取得や検証が簡単に行えます。


データをリストとして取得する方法

Excelの内容をリストとして扱いたいケースもよくあります。以下は、2列の内容をListに格納する例です。

var items = new List<(string Name, int Age)>();

for (int row = 2; row <= worksheet.LastRowUsed().RowNumber(); row++)
{
string name = worksheet.Cell(row, 1).GetValue<string>();
int age = worksheet.Cell(row, 2).GetValue<int>();
items.Add((name, age));
}

foreach (var item in items)
{
Console.WriteLine($"Name: {item.Name}, Age: {item.Age}");
}

実務でExcelをデータベースのように使う場面では、このような使い方が便利です。


Microsoft.Office.Interop.Excel を使う場合の注意点

ClosedXMLの代わりに、Microsoftの公式ライブラリ「Microsoft.Office.Interop.Excel」を使うことも可能ですが、以下の点に注意が必要です。

  • Excelのインストールが必須
  • 処理速度が遅い
  • 実行環境にOfficeのバージョン依存が発生する
  • COMオブジェクトの解放漏れでメモリリークしやすい

以下はInteropを使った最小限のサンプルコードです:

using Excel = Microsoft.Office.Interop.Excel;

class Program
{
static void Main()
{
var excelApp = new Excel.Application();
var workbook = excelApp.Workbooks.Open(@"C:\sample.xlsx");
Excel.Worksheet sheet = workbook.Sheets[1];
Excel.Range range = sheet.Cells[1, 1];

Console.WriteLine(range.Value);

workbook.Close(false);
excelApp.Quit();
}
}

この方法は、Office製品との連携が強いアプリ(マクロ代替など)では有効ですが、通常はClosedXMLの方が無難です。


Excel読み込み時によくあるエラーと対処法

ファイルが開けない/例外が発生する

→ パスの指定ミス、または読み取り専用ロックが原因の可能性があります。ファイルが開いていないか、存在しているか確認しましょう。

セルが空でNullReferenceExceptionになる

.GetValue<string>() でnullが返ることもあるので、nullチェックやデフォルト値の設定をしましょう。

日本語が文字化けする

→ ClosedXMLでは通常UTF-8で問題ありませんが、CSV読み込みと混同しないよう注意しましょう。


実務での活用例

  • 社内の申請データの一括読込
  • Excelで集計された営業データの月次取り込み
  • 請求書の情報を自動的に読み取ってPDF化

特に定型のExcelフォーマットがあれば、マクロより柔軟に処理できるC#の方が再利用性・保守性が高いです。


まとめ

C#でExcelファイルを読み込む方法は複数ありますが、ClosedXMLを使う方法がもっとも実用的でおすすめです。シンプルな記法で強力な操作ができるため、初心者から中級者まで広く活用されています。業務で繰り返し行うExcel処理を自動化したい方は、ぜひ今回紹介したコードを参考に、自社向けのツール開発に取り組んでみてください。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。