C#でExcelファイルをインポートする方法

チャクニット・ビン
チャクニット・ビン
2020年7月19日
更新済み 2024年10月20日
共有:
This article was translated from English: Does it need improvement?
Translated
View the article in English

開発者として、Excelファイルからデータをインポートし、それを使用してアプリケーションおよびデータ管理の要件を満たす必要があることがよくあります。 多くのコード行を必要とせずに、IronXLは必要なデータを正確にC#プロジェクトに直接インポートし、それをプログラムによって操作する簡単な方法を提供します。


ステップ 1

IronXL ライブラリでデータをインポートする

このチュートリアルで使用するIronXL Excelライブラリが提供する機能を使用してデータをインポートします。 ソフトウェアは開発用に無料で利用可能です。

DLLダウンロードを介してC#プロジェクトにインストールするか、NuGetパッケージを使用して移動する

Install-Package IronXL.Excel

チュートリアルの方法

プロジェクト用のワークシートにアクセス

今日のプロジェクトのニーズに合わせて、ステップ1でインストールしたIronXLソフトウェアを使用し、ExcelデータをC#アプリケーションにインポートします。

ステップ2では、IronXLのWorkBook.Load()関数を使用して、CSharpプロジェクトにExcel WorkBookを読み込みます。 この関数では、Excel WorkBookのパスを文字列パラメーターとして渡します。このように:

//load Excel file
WorkBook wb = WorkBook.Load("Path");
//load Excel file
WorkBook wb = WorkBook.Load("Path");
'load Excel file
Dim wb As WorkBook = WorkBook.Load("Path")
$vbLabelText   $csharpLabel

指定されたパスのExcelファイルがwbに読み込まれます。

次に、プロジェクトにデータをインポートするExcelファイルの特定のワークシートにアクセスする必要があります。 この目的のために、IronXL の GetWorkSheet() 関数を使用できます。 この関数には、インポートするWorkBookのシートを指定するために、シート名を文字列パラメータとして渡します。

//specify sheet name of Excel WorkBook
WorkSheet ws = wb.GetWorkSheet("SheetName");
//specify sheet name of Excel WorkBook
WorkSheet ws = wb.GetWorkSheet("SheetName");
'specify sheet name of Excel WorkBook
Dim ws As WorkSheet = wb.GetWorkSheet("SheetName")
$vbLabelText   $csharpLabel

ワークシートはwsとしてインポートされ、wbは上記のコードサンプルで定義したワークブックです。

プロジェクトにExcelワークシートをインポートするには、以下のような別の方法もあります。

/**
Import WorkSheet 
anchor-access-worksheet-for-project
**/
//by sheet indexing
WorkBook.WorkSheets [SheetIndex];
//get default  WorkSheet
WorkBook.DefaultWorkSheet;
//get first WorkSheet
WorkBook.WorkSheets.First();
//for the first or default sheet:
WorkBook.WorkSheets.FirstOrDefault();
/**
Import WorkSheet 
anchor-access-worksheet-for-project
**/
//by sheet indexing
WorkBook.WorkSheets [SheetIndex];
//get default  WorkSheet
WorkBook.DefaultWorkSheet;
//get first WorkSheet
WorkBook.WorkSheets.First();
//for the first or default sheet:
WorkBook.WorkSheets.FirstOrDefault();
'''
'''Import WorkSheet 
'''anchor-access-worksheet-for-project
'''*
'by sheet indexing
WorkBook.WorkSheets (SheetIndex)
'get default  WorkSheet
WorkBook.DefaultWorkSheet
'get first WorkSheet
WorkBook.WorkSheets.First()
'for the first or default sheet:
WorkBook.WorkSheets.FirstOrDefault()
$vbLabelText   $csharpLabel

これで、指定されたExcelファイルからあらゆる種類のデータを簡単にインポートできます。 以下の方法で、プロジェクトにExcelファイルデータをインポートするすべての可能な側面を見てみましょう。


C#でExcelデータをインポート

これはプロジェクト内でExcelファイルのデータをインポートする基本的な側面です。

この目的のために、どのセルデータをインポートする必要があるかを指定するために、セルアドレッシングシステムを使用できます。 それは、Excelファイルの特定のセルアドレスの値を返します。

WorkSheet ["Cell Address"];
WorkSheet ["Cell Address"];
WorkSheet ("Cell Address")
$vbLabelText   $csharpLabel

行と列のインデックスを使用してExcelファイルからセルデータをインポートすることもできます。 このコード行は、指定された行および列のインデックスの値を返します。

WorkSheet.Rows [RowIndex].Columns [ColumnIndex]
WorkSheet.Rows [RowIndex].Columns [ColumnIndex]
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'WorkSheet.Rows [RowIndex].Columns [ColumnIndex]
$vbLabelText   $csharpLabel

インポートしたセルの値を変数に割り当てたい場合は、次のコードを使用できます。

/**
Import Data by Cell Address
anchor-import-excel-data-in-c-num
**/
//by cell addressing
string val = WorkSheet ["Cell Address"].ToString();
//by row and column indexing
string val = WorkSheet.Rows [RowIndex].Columns [ColumnIndex].Value.ToString();
/**
Import Data by Cell Address
anchor-import-excel-data-in-c-num
**/
//by cell addressing
string val = WorkSheet ["Cell Address"].ToString();
//by row and column indexing
string val = WorkSheet.Rows [RowIndex].Columns [ColumnIndex].Value.ToString();
'''
'''Import Data by Cell Address
'''anchor-import-excel-data-in-c-num
'''*
'by cell addressing
Dim val As String = WorkSheet ("Cell Address").ToString()
'by row and column indexing
Dim val As String = WorkSheet.Rows (RowIndex).Columns (ColumnIndex).Value.ToString()
$vbLabelText   $csharpLabel

上記の例では、行と列のインデックスは0から始まります。


特定の範囲のExcelデータをインポートする

特定の範囲でExcel WorkBookからデータをインポートしたい場合、range関数を使用することで簡単に行うことができます。 範囲を定義するためには、開始セルと終了セルのアドレスを記述する必要があります。 この方法で、指定された範囲内にあるすべてのセルの値を返します。

WorkSheet ["starting Cell Address : Ending Cell Address"];
WorkSheet ["starting Cell Address : Ending Cell Address"];
WorkSheet ("starting Cell Address : Ending Cell Address")
$vbLabelText   $csharpLabel

Excel ファイル内の範囲を扱う詳細については、提供されているコード例をご覧ください。

/**
Import Data by Range
anchor-import-excel-data-of-specific-range
**/
using IronXL;
static void Main(string [] args)
{
    //import Excel WorkBook
    WorkBook wb = WorkBook.Load("sample.xlsx");
    //specify WorkSheet
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //import data of specific cell
    string val = ws ["A4"].Value.ToString();
    Console.WriteLine("Import Value of A4 Cell address: {0}",val);
    Console.WriteLine("import Values in Range From B3 To B9 :\n");
    //import data in specific range
    foreach (var item in ws ["B3:B9"])
    {
        Console.WriteLine(item.Value.ToString());
    }

    Console.ReadKey();
}
/**
Import Data by Range
anchor-import-excel-data-of-specific-range
**/
using IronXL;
static void Main(string [] args)
{
    //import Excel WorkBook
    WorkBook wb = WorkBook.Load("sample.xlsx");
    //specify WorkSheet
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //import data of specific cell
    string val = ws ["A4"].Value.ToString();
    Console.WriteLine("Import Value of A4 Cell address: {0}",val);
    Console.WriteLine("import Values in Range From B3 To B9 :\n");
    //import data in specific range
    foreach (var item in ws ["B3:B9"])
    {
        Console.WriteLine(item.Value.ToString());
    }

    Console.ReadKey();
}
'''
'''Import Data by Range
'''anchor-import-excel-data-of-specific-range
'''*
Imports Microsoft.VisualBasic
Imports IronXL
Shared Sub Main(ByVal args() As String)
	'import Excel WorkBook
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	'specify WorkSheet
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'import data of specific cell
	Dim val As String = ws ("A4").Value.ToString()
	Console.WriteLine("Import Value of A4 Cell address: {0}",val)
	Console.WriteLine("import Values in Range From B3 To B9 :" & vbLf)
	'import data in specific range
	For Each item In ws ("B3:B9")
		Console.WriteLine(item.Value.ToString())
	Next item

	Console.ReadKey()
End Sub
$vbLabelText   $csharpLabel

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

1output related to 特定の範囲のExcelデータをインポートする

Excelファイルsample.xlsxの値:

1excel related to 特定の範囲のExcelデータをインポートする

集計関数によるExcelデータのインポート

Excelファイルに集計関数を適用し、その集計関数の結果データをインポートすることもできます。 以下はいくつかの異なる機能とその使用方法の例です。

  • 合計()
 //to find the sum of specific cell range 
WorkSheet ["Starting Cell Address : Ending Cell Address"].Sum();
 //to find the sum of specific cell range 
WorkSheet ["Starting Cell Address : Ending Cell Address"].Sum();
'to find the sum of specific cell range 
WorkSheet ("Starting Cell Address : Ending Cell Address").Sum()
$vbLabelText   $csharpLabel
  • Average()
 //to find the average of specific cell range 
WorkSheet ["Starting Cell Address : Ending Cell Address"].Avg()
 //to find the average of specific cell range 
WorkSheet ["Starting Cell Address : Ending Cell Address"].Avg()
'to find the average of specific cell range 
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'WorkSheet ["Starting Cell Address : Ending Cell Address"].Avg()
$vbLabelText   $csharpLabel
  • Min()
 //to find the Min In specific cell range 
WorkSheet ["Starting Cell Address : Ending Cell Address"].Min()
 //to find the Min In specific cell range 
WorkSheet ["Starting Cell Address : Ending Cell Address"].Min()
'to find the Min In specific cell range 
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'WorkSheet ["Starting Cell Address : Ending Cell Address"].Min()
$vbLabelText   $csharpLabel
  • Max()
 //to find the Max in specific cell range 
WorkSheet ["Starting Cell Address : Ending Cell Address"].Max()
 //to find the Max in specific cell range 
WorkSheet ["Starting Cell Address : Ending Cell Address"].Max()
'to find the Max in specific cell range 
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'WorkSheet ["Starting Cell Address : Ending Cell Address"].Max()
$vbLabelText   $csharpLabel

さまざまな方法でデータを取得する方法については、C# 用 Excel の集計関数に関する詳細を読むことができます。

これらの機能を適用してExcelファイルのデータをインポートする方法の例を見てみましょう。

/**
Import Data by Aggregate Function
anchor-import-excel-data-by-aggregate-functions
**/
using IronXL;
static void Main(string [] args)
{
    //Import Excel file
    WorkBook wb = WorkBook.Load("sample.xlsx");
    //Specify WorkSheet
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Import Excel file data by applying aggregate functions
    decimal Sum = ws ["D2:D9"].Sum();
    decimal Avg = ws ["D2:D9"].Avg();
    decimal Min = ws ["D2:D9"].Min();
    decimal Max = ws ["D2:D9"].Max();
    Console.WriteLine("Sum From D2 To D9: {0}", Sum);
    Console.WriteLine("Avg From D2 To D9: {0}", Avg);
    Console.WriteLine("Min From D2 To D9: {0}", Min);
    Console.WriteLine("Max From D2 To D9: {0}", Max);
    Console.ReadKey();
}
/**
Import Data by Aggregate Function
anchor-import-excel-data-by-aggregate-functions
**/
using IronXL;
static void Main(string [] args)
{
    //Import Excel file
    WorkBook wb = WorkBook.Load("sample.xlsx");
    //Specify WorkSheet
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Import Excel file data by applying aggregate functions
    decimal Sum = ws ["D2:D9"].Sum();
    decimal Avg = ws ["D2:D9"].Avg();
    decimal Min = ws ["D2:D9"].Min();
    decimal Max = ws ["D2:D9"].Max();
    Console.WriteLine("Sum From D2 To D9: {0}", Sum);
    Console.WriteLine("Avg From D2 To D9: {0}", Avg);
    Console.WriteLine("Min From D2 To D9: {0}", Min);
    Console.WriteLine("Max From D2 To D9: {0}", Max);
    Console.ReadKey();
}
'''
'''Import Data by Aggregate Function
'''anchor-import-excel-data-by-aggregate-functions
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	'Import Excel file
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	'Specify WorkSheet
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'Import Excel file data by applying aggregate functions
	Dim Sum As Decimal = ws ("D2:D9").Sum()
	Dim Avg As Decimal = ws ("D2:D9").Avg()
	Dim Min As Decimal = ws ("D2:D9").Min()
	Dim Max As Decimal = ws ("D2:D9").Max()
	Console.WriteLine("Sum From D2 To D9: {0}", Sum)
	Console.WriteLine("Avg From D2 To D9: {0}", Avg)
	Console.WriteLine("Min From D2 To D9: {0}", Min)
	Console.WriteLine("Max From D2 To D9: {0}", Max)
	Console.ReadKey()
End Sub
$vbLabelText   $csharpLabel

上記のコードは次の出力を生成します:

2output related to 集計関数によるExcelデータのインポート

そして、ファイルsample.xlsxにはこれらの値が含まれています:

2excel related to 集計関数によるExcelデータのインポート

6. 完全なExcelファイルデータをインポートする

C#プロジェクトにExcelファイルのデータを完全にインポートしたい場合、まず読み込んだWorkBookをDataSetに解析することができます。 この方法で、完全なExcelデータがDataSetにインポートされ、ExcelファイルのWorkSheetsがそのDataSetのDataTablesになります。 ここにその動作があります:

//import WorkBook into dataset
DataSet ds = WorkBook.ToDataSet();
//import WorkBook into dataset
DataSet ds = WorkBook.ToDataSet();
'import WorkBook into dataset
Dim ds As DataSet = WorkBook.ToDataSet()
$vbLabelText   $csharpLabel

このようにして、指定されたWorkSheetは、必要に応じて使用できるDataSetにインポートされます。

しばしば、Excelファイルの最初の列はColumnNameとして使用されます。 この場合、最初の列を DataTable ColumnName として設定する必要があります。 これを行うために、IronXL の ToDataSet() 関数のブールパラメーターを次のように設定します。

ToDataSet(true);
ToDataSet(true);
ToDataSet(True)
$vbLabelText   $csharpLabel

これは、Excelファイルの最初の列をDataTableのColumnNameにします。

次の例では、Excelデータをデータセットにインポートし、Excelワークシートの最初の列をDataTableのカラム名として使用する方法を完全に示します。

/**
Import to Dataset
anchor-import-complete-excel-file-data
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    DataSet ds = new DataSet();
    ds = wb.ToDataSet(true);
    Console.WriteLine("Excel file data imported to dataset successfully.");
    Console.ReadKey();
}
/**
Import to Dataset
anchor-import-complete-excel-file-data
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    DataSet ds = new DataSet();
    ds = wb.ToDataSet(true);
    Console.WriteLine("Excel file data imported to dataset successfully.");
    Console.ReadKey();
}
'''
'''Import to Dataset
'''anchor-import-complete-excel-file-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 ds As New DataSet()
	ds = wb.ToDataSet(True)
	Console.WriteLine("Excel file data imported to dataset successfully.")
	Console.ReadKey()
End Sub
$vbLabelText   $csharpLabel

Excel ドataset と Datatable の関数を扱うのは複雑な場合がありますが、ファイルデータを C# プロジェクトに組み込むための例をもっと用意しています。


ライブラリ クイック アクセス

IronXLリファレンスを探る

IronXLのAPIリファレンス全書にて、セル、範囲、データセット、およびデータテーブルを通じてExcelデータを取得する方法について詳しく学ぶことができます。

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