C#を使ってExcelファイルを読み込む方法は、業務アプリケーション開発やデータ処理の現場で非常に重宝されます。手動でExcelを開かずに、プログラムから自動的にデータを取得できれば、作業効率は飛躍的に向上します。この記事では、C#でExcelファイル(.xlsx形式)を読み込む基本的な方法から、よく使われるライブラリ「ClosedXML」や「Microsoft Interop Excel」の使い方、さらには注意点や実用例までを詳しく解説します。初心者の方にもわかりやすく、実際のコード付きで紹介していきます。
C#でExcelファイルを読み込む方法はいくつかあります。代表的な方法は以下の3つです。
この中で最も扱いやすく、現在主流となっているのが ClosedXML です。この記事では主にClosedXMLを使った方法を中心に解説し、最後にInteropを使う場合の注意点にも触れます。
ClosedXML は、.NET環境でExcelファイル(xlsx形式)を簡単に読み書きできるライブラリです。Microsoft Officeがインストールされていなくても動作するのが大きなメリットです。
Install-Package ClosedXML
あるいは、NuGetパッケージマネージャーから「ClosedXML」で検索してインストールしてもOKです。
以下のコードは、指定された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をデータベースのように使う場面では、このような使い方が便利です。
ClosedXMLの代わりに、Microsoftの公式ライブラリ「Microsoft.Office.Interop.Excel」を使うことも可能ですが、以下の点に注意が必要です。
以下は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の方が無難です。
→ パスの指定ミス、または読み取り専用ロックが原因の可能性があります。ファイルが開いていないか、存在しているか確認しましょう。
→ .GetValue<string>()
でnullが返ることもあるので、nullチェックやデフォルト値の設定をしましょう。
→ ClosedXMLでは通常UTF-8で問題ありませんが、CSV読み込みと混同しないよう注意しましょう。
特に定型のExcelフォーマットがあれば、マクロより柔軟に処理できるC#の方が再利用性・保守性が高いです。
C#でExcelファイルを読み込む方法は複数ありますが、ClosedXMLを使う方法がもっとも実用的でおすすめです。シンプルな記法で強力な操作ができるため、初心者から中級者まで広く活用されています。業務で繰り返し行うExcel処理を自動化したい方は、ぜひ今回紹介したコードを参考に、自社向けのツール開発に取り組んでみてください。