C# で XLSX ファイルを読み取る

This article was translated from English: Does it need improvement?
Translated
View the article in English

さまざまなExcel形式で作業する場合、データを読み取り、プログラム的に操作する必要があることがよくあります。 以下のチュートリアルでは、便利なツールIronXLを使用して、C#でExcelスプレッドシートからデータを読み取る方法を学びます。


ステップ 1

1. プロジェクトにIronXLを導入する

あなたのプロジェクトでIronXLを使用して、C#でExcelファイル形式を簡単に操作しましょう。 IronXL を直接ダウンロードしてインストールするか、Visual StudioのNuGetインストールを使用することができます。 このソフトウェアは開発用として無料で使用できます。

Install-Package IronXL.Excel

チュートリアルの方法

2. ワークブックを読み込む

WorkBookは、Excelファイルとそのすべての機能に完全にアクセスできるIronXLのクラスです。 例えば、Excelファイルにアクセスする場合、以下のコードを使用します:

/** Load Workbook anchor-load-workbook **/ WorkBook wb = WorkBook.Load("sample.xlsx");//Excel file path
/** Load Workbook anchor-load-workbook **/ WorkBook wb = WorkBook.Load("sample.xlsx");//Excel file path
''' '''Load Workbook '''anchor-load-workbook '''* Dim wb As WorkBook = WorkBook.Load("sample.xlsx") 'Excel file path
$vbLabelText   $csharpLabel

上記のコードでは、WorkBook.Load() 関数が wbsample.xlsx を読み込みます。 Excelファイルの特定のWorkSheetにアクセスすることで、wb上で任意のタイプの関数を実行できます。


ワークシートを特定してアクセスする

Excelファイルの特定のワークシートにアクセスするために、IronXLはWorkSheetクラスを提供します。 いくつかの異なる方法で使用できます:

/** Access Sheet by Name anchor-access-specific-worksheet **/ WorkSheet ws = wb.GetWorkSheet("Sheet1"); //by sheet name
/** Access Sheet by Name anchor-access-specific-worksheet **/ WorkSheet ws = wb.GetWorkSheet("Sheet1"); //by sheet name
''' '''Access Sheet by Name '''anchor-access-specific-worksheet '''* Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1") 'by sheet name
$vbLabelText   $csharpLabel

wb は上記の部分で宣言されている WorkBook です。

OR

/** Access Sheet by Index anchor-access-specific-worksheet **/ WorkSheet ws = wb.WorkSheets [0]; //by sheet index
/** Access Sheet by Index anchor-access-specific-worksheet **/ WorkSheet ws = wb.WorkSheets [0]; //by sheet index
''' '''Access Sheet by Index '''anchor-access-specific-worksheet '''* Dim ws As WorkSheet = wb.WorkSheets (0) 'by sheet index
$vbLabelText   $csharpLabel

OR

WorkSheet ws = wb.DefaultWorkSheet; //for the default sheet: 
WorkSheet ws = wb.DefaultWorkSheet; //for the default sheet: 
Dim ws As WorkSheet = wb.DefaultWorkSheet 'for the default sheet:
$vbLabelText   $csharpLabel

OR

WorkSheet ws = wb.WorkSheets.First();//for the first sheet:
WorkSheet ws = wb.WorkSheets.First();//for the first sheet:
Dim ws As WorkSheet = wb.WorkSheets.First() 'for the first sheet:
$vbLabelText   $csharpLabel

OR

WorkSheet ws = wb.WorkSheets.FirstOrDefault();//for the first or default sheet:
WorkSheet ws = wb.WorkSheets.FirstOrDefault();//for the first or default sheet:
Dim ws As WorkSheet = wb.WorkSheets.FirstOrDefault() 'for the first or default sheet:
$vbLabelText   $csharpLabel

ExcelSheet wsを取得した後は、そこからあらゆる種類のデータを取得し、Excelのすべての機能を実行できます。


ワークシートからデータにアクセスする

データはこのプロセスでExcelSheet ws からアクセスできます:

string c = ws ["cell address"].ToString(); //for string Int32 val = ws ["cell address"].Int32Value; //for integer
string c = ws ["cell address"].ToString(); //for string Int32 val = ws ["cell address"].Int32Value; //for integer
Dim c As String = ws ("cell address").ToString() 'for string Dim val As Int32 = ws ("cell address").Int32Value 'for integer
$vbLabelText   $csharpLabel

特定の列の複数のセルからデータを取得することも可能です。

foreach (var cell in ws ["A2:A10"]) { Console.WriteLine("value is: {0}", cell.Text); }
foreach (var cell in ws ["A2:A10"]) { Console.WriteLine("value is: {0}", cell.Text); }
For Each cell In ws ("A2:A10")	Console.WriteLine("value is: {0}", cell.Text) Next cell
$vbLabelText   $csharpLabel

セルA2からA10までの値を表示します。

以下に、上記の詳細についての完全なコード例を提供します。

/** Access WorkSheet Data anchor-access-data-from-worksheet **/ using IronXL; static void Main(string [] args) { WorkBook wb = WorkBook.Load("sample.xlsx"); WorkSheet ws = wb.GetWorkSheet("Sheet1"); foreach (var cell in ws ["A2:A10"]) { Console.WriteLine("value is: {0}", cell.Text); } Console.ReadKey(); }
/** Access WorkSheet Data anchor-access-data-from-worksheet **/ using IronXL; static void Main(string [] args) { WorkBook wb = WorkBook.Load("sample.xlsx"); WorkSheet ws = wb.GetWorkSheet("Sheet1"); foreach (var cell in ws ["A2:A10"]) { Console.WriteLine("value is: {0}", cell.Text); } Console.ReadKey(); }
''' '''Access WorkSheet Data '''anchor-access-data-from-worksheet '''* Imports IronXL Shared Sub Main(ByVal args() As String)	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")	For Each cell In ws ("A2:A10")	Console.WriteLine("value is: {0}", cell.Text)	Next cell	Console.ReadKey() End Sub
$vbLabelText   $csharpLabel

次の結果が表示されます:

Doc3 Input1 related to ワークシートからデータにアクセスする

ExcelファイルSample.xlsxを使用して:

Doc3 1 related to ワークシートからデータにアクセスする

これらの方法を使用してプロジェクト内でExcelファイルのデータを利用するのがいかに簡単かがわかります。


データに対する関数の実行

以下のコードを使用すると、Sum、Min、またはMaxのような集計関数を適用して、Excel WorkSheetからフィルタリングされたデータに簡単にアクセスできます。

decimal sum = ws ["From:To"].Sum(); decimal min = ws ["From:To"].Min(); decimal max = ws ["From:To"].Max();
decimal sum = ws ["From:To"].Sum(); decimal min = ws ["From:To"].Min(); decimal max = ws ["From:To"].Max();
Dim sum As Decimal = ws ("From:To").Sum() Dim min As Decimal = ws ("From:To").Min() Dim max As Decimal = ws ("From:To").Max()
$vbLabelText   $csharpLabel

詳細を知りたい方は、集計関数に関する具体的な情報を含んだ「C# Excel ファイルの書き込み方法」に関する詳細なチュートリアルをご覧ください。

/** Sum Min Max Functions anchor-perform-functions-on-data **/ using IronXL; static void Main(string [] args) { WorkBook wb = WorkBook.Load("sample.xlsx"); WorkSheet ws = wb.GetWorkSheet("Sheet1"); decimal sum = ws ["G2:G10"].Sum(); decimal min = ws ["G2:G10"].Min(); decimal max = ws ["G2:G10"].Max(); Console.WriteLine("Sum is: {0}", sum); Console.WriteLine("Min is: {0}", min); Console.WriteLine("Max is: {0}", max); Console.ReadKey(); }
/** Sum Min Max Functions anchor-perform-functions-on-data **/ using IronXL; static void Main(string [] args) { WorkBook wb = WorkBook.Load("sample.xlsx"); WorkSheet ws = wb.GetWorkSheet("Sheet1"); decimal sum = ws ["G2:G10"].Sum(); decimal min = ws ["G2:G10"].Min(); decimal max = ws ["G2:G10"].Max(); Console.WriteLine("Sum is: {0}", sum); Console.WriteLine("Min is: {0}", min); Console.WriteLine("Max is: {0}", max); Console.ReadKey(); }
''' '''Sum Min Max Functions '''anchor-perform-functions-on-data '''* Imports IronXL Shared Sub Main(ByVal args() As String)	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")	Dim sum As Decimal = ws ("G2:G10").Sum()	Dim min As Decimal = ws ("G2:G10").Min()	Dim max As Decimal = ws ("G2:G10").Max()	Console.WriteLine("Sum is: {0}", sum)	Console.WriteLine("Min is: {0}", min)	Console.WriteLine("Max is: {0}", max)	Console.ReadKey() End Sub
$vbLabelText   $csharpLabel

このコードは次の出力を表示します:

Doc3 Output2 related to データに対する関数の実行

そして、このようにしてExcelファイルSample.xlsxが表示されます。

Doc3 2 related to データに対する関数の実行

ExcelワークシートをDataTableとして読み込む

IronXLを使用すると、ExcelのWorkSheetをDataTableとして操作するのは非常に簡単です。

DataTable dt=WorkSheet.ToDataTable();
DataTable dt=WorkSheet.ToDataTable();
Dim dt As DataTable=WorkSheet.ToDataTable()
$vbLabelText   $csharpLabel

次のように、Excelシートの最初の行を DataTableのカラム名として使用する場合:

DataTable dt=WorkSheet.ToDataTable(True);
DataTable dt=WorkSheet.ToDataTable(True);
Dim dt As DataTable=WorkSheet.ToDataTable([True])
$vbLabelText   $csharpLabel

したがって、ToDataTable()のブール型パラメーターは、最初の行をデータテーブルの列名として設定します。 デフォルトでは、その値はFalseです。

/** WorkSheet as DataTable anchor-read-excel-worksheet-as-datatable **/ using IronXL; using System.Data; static void Main(string [] args) { WorkBook wb = WorkBook.Load("sample.xlsx"); WorkSheet ws = wb.GetWorkSheet("Sheet1"); DataTable dt = ws.ToDataTable(true);//parse sheet1 of sample.xlsx file into datatable foreach (DataRow row in dt.Rows) //access rows { for (int i = 0; i < dt.Columns.Count; i++) //access columns of corresponding row { Console.Write(row [i]); } } }
/** WorkSheet as DataTable anchor-read-excel-worksheet-as-datatable **/ using IronXL; using System.Data; static void Main(string [] args) { WorkBook wb = WorkBook.Load("sample.xlsx"); WorkSheet ws = wb.GetWorkSheet("Sheet1"); DataTable dt = ws.ToDataTable(true);//parse sheet1 of sample.xlsx file into datatable foreach (DataRow row in dt.Rows) //access rows { for (int i = 0; i < dt.Columns.Count; i++) //access columns of corresponding row { Console.Write(row [i]); } } }
''' '''WorkSheet as DataTable '''anchor-read-excel-worksheet-as-datatable '''* Imports IronXL Imports System.Data Shared Sub Main(ByVal args() As String)	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")	Dim dt As DataTable = ws.ToDataTable(True) 'parse sheet1 of sample.xlsx file into datatable	For Each row As DataRow In dt.Rows 'access rows	For i As Integer = 0 To dt.Columns.Count - 1 'access columns of corresponding row	Console.Write(row (i))	Next i	Next row End Sub
$vbLabelText   $csharpLabel

上記のコードを使用することで、WorkSheetのすべてのセル値にアクセスして必要に応じて使用することができます。


7. ExcelファイルをDataSetとして読み込む

IronXLは、完全なExcelファイル(WorkBook)をDataSetとして使用するための非常にシンプルな機能を提供します。

DataSet ds = WorkBook.ToDataSet();
DataSet ds = WorkBook.ToDataSet();
Dim ds As DataSet = WorkBook.ToDataSet()
$vbLabelText   $csharpLabel

こちらの例から分かるように、WorkBookはあなたのExcelファイルです。

この例では、ExcelファイルをDataSetとして使用する方法を見てみましょう。

/** Excel File as DataSet anchor-read-excel-file-as-dataset **/ using IronXL; using System.Data; static void Main(string [] args) { WorkBook wb = WorkBook.Load("sample.xlsx"); DataSet ds = wb.ToDataSet(); //Parse WorkBook wb into DataSet foreach (DataTable dt in ds.Tables) { Console.WriteLine(dt.TableName); } }
/** Excel File as DataSet anchor-read-excel-file-as-dataset **/ using IronXL; using System.Data; static void Main(string [] args) { WorkBook wb = WorkBook.Load("sample.xlsx"); DataSet ds = wb.ToDataSet(); //Parse WorkBook wb into DataSet foreach (DataTable dt in ds.Tables) { Console.WriteLine(dt.TableName); } }
''' '''Excel File as DataSet '''anchor-read-excel-file-as-dataset '''* Imports IronXL Imports System.Data Shared Sub Main(ByVal args() As String)	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")	Dim ds As DataSet = wb.ToDataSet() 'Parse WorkBook wb into DataSet	For Each dt As DataTable In ds.Tables	Console.WriteLine(dt.TableName)	Next dt End Sub
$vbLabelText   $csharpLabel

上記のコードの出力は次のようになります:

Doc10 Output2 related to 7. ExcelファイルをDataSetとして読み込む

そして、ExcelファイルSample.xlsxは次のようになります:

Doc10 2 related to 7. ExcelファイルをDataSetとして読み込む

上記の例では、ExcelファイルをDataSetに簡単に解析し、Excelファイルの各WorkSheetをDataTableとして処理できることがわかります。 DataSetとしてExcelを解析する方法について、コード例を交えながらさらに詳しく学びましょう。

すべてのExcelシートの各セル値にアクセスする方法のもう一つの例を見てみましょう。 ここでは、Excelファイルの各ワークシートの各セル値にアクセスすることができます。

/** WorkSheet Cell Values anchor-read-excel-file-as-dataset **/ using IronXL; using System.Data; static void Main(string [] args) { WorkBook wb = WorkBook.Load("sample.xlsx"); DataSet ds = wb.ToDataSet();//behave complete Excel file as DataSet foreach (DataTable dt in ds.Tables)//behave Excel WorkSheet as DataTable. { foreach (DataRow row in dt.Rows)//corresponding Sheet's Rows { for (int i = 0; i < dt.Columns.Count; i++)//Sheet columns of corresponding row { Console.Write(row [i]); } } } }
/** WorkSheet Cell Values anchor-read-excel-file-as-dataset **/ using IronXL; using System.Data; static void Main(string [] args) { WorkBook wb = WorkBook.Load("sample.xlsx"); DataSet ds = wb.ToDataSet();//behave complete Excel file as DataSet foreach (DataTable dt in ds.Tables)//behave Excel WorkSheet as DataTable. { foreach (DataRow row in dt.Rows)//corresponding Sheet's Rows { for (int i = 0; i < dt.Columns.Count; i++)//Sheet columns of corresponding row { Console.Write(row [i]); } } } }
''' '''WorkSheet Cell Values '''anchor-read-excel-file-as-dataset '''* Imports IronXL Imports System.Data Shared Sub Main(ByVal args() As String) Dim wb As WorkBook = WorkBook.Load("sample.xlsx") Dim ds As DataSet = wb.ToDataSet() 'behave complete Excel file as DataSet For Each dt As DataTable In ds.Tables 'behave Excel WorkSheet as DataTable.	For Each row As DataRow In dt.Rows 'corresponding Sheet's Rows	For i As Integer = 0 To dt.Columns.Count - 1 'Sheet columns of corresponding row	Console.Write(row (i))	Next i	Next row Next dt End Sub
$vbLabelText   $csharpLabel

上記の例を使用すると、Excelファイルの各ワークシートの各セル値に非常に便利にアクセスできます。

Interopを使用せずにExcelファイルを読み取る方法については、こちらのコードをご覧ください。


チュートリアル クイック アクセス

IronXLのAPIリファレンス

ドキュメントに記載されたIronXLの機能、クラス、メソッドフィールド、名前空間、および列挙型について詳しく読む。

IronXLのAPIリファレンス
Documentation related to チュートリアル クイック アクセス
チャクニット・ビン
ソフトウェアエンジニア
ChaknithはIronXLとIronBarcodeで作業しています。彼はC#と.NETに深い専門知識を持ち、ソフトウェアの改善と顧客サポートを支援しています。ユーザーとの対話から得た彼の洞察は、より良い製品、文書、および全体的な体験に貢献しています。