C# で XLSX ファイルを読み取る
さまざまな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
上記のコードでは、WorkBook.Load()
関数が wb
に sample.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
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
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:
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:
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:
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
特定の列の複数のセルからデータを取得することも可能です。
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
セル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
次の結果が表示されます:
ExcelファイルSample.xlsx
を使用して:
これらの方法を使用してプロジェクト内で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()
詳細を知りたい方は、集計関数に関する具体的な情報を含んだ「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
このコードは次の出力を表示します:
そして、このようにしてExcelファイルSample.xlsx
が表示されます。
ExcelワークシートをDataTableとして読み込む
IronXLを使用すると、ExcelのWorkSheetをDataTableとして操作するのは非常に簡単です。
DataTable dt=WorkSheet.ToDataTable();
DataTable dt=WorkSheet.ToDataTable();
Dim dt As DataTable=WorkSheet.ToDataTable()
次のように、Excelシートの最初の行を DataTableのカラム名として使用する場合:
DataTable dt=WorkSheet.ToDataTable(True);
DataTable dt=WorkSheet.ToDataTable(True);
Dim dt As DataTable=WorkSheet.ToDataTable([True])
したがって、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
上記のコードを使用することで、WorkSheetのすべてのセル値にアクセスして必要に応じて使用することができます。
7. ExcelファイルをDataSetとして読み込む
IronXLは、完全なExcelファイル(WorkBook
)をDataSetとして使用するための非常にシンプルな機能を提供します。
DataSet ds = WorkBook.ToDataSet();
DataSet ds = WorkBook.ToDataSet();
Dim ds As DataSet = WorkBook.ToDataSet()
こちらの例から分かるように、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
上記のコードの出力は次のようになります:
そして、ExcelファイルSample.xlsx
は次のようになります:
上記の例では、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
上記の例を使用すると、Excelファイルの各ワークシートの各セル値に非常に便利にアクセスできます。
Interopを使用せずにExcelファイルを読み取る方法については、こちらのコードをご覧ください。