フッターコンテンツにスキップ
IRONXLの使用

C#でIronXLを使用してMS Excelファイルのデータを簡単にインポート、読み取り、操作する方法

Microsoft Excelファイルを扱うことは、多くの.NET開発者にとって日常的な要件です。 顧客データのインポート、財務レポートの処理、スプレッドシートやExcelワークブックからデータベースへのデータ移行など、開発者は、複雑な依存関係やExcelのインストールを必要とせずに、Excelファイルを読み込んだり、Excel(XLSX)ファイルをエクスポートしたりする信頼性の高い方法を必要としています。 IronXLは、Microsoft Officeをインストールする必要がなく、プラットフォーム間で動作する簡単なソリューションを提供します。

How to Easily Import, Read, and Manipulate MS Excel File Data in C# Using IronXL: Image 1 - IronXL.

C&numを使い始めるには; Excelデータをインポートするには?

IronXLを使えば、C#でのExcelインポートを数分で始めることができます。 Excelライブラリは、CSV、TSV、およびその他のスプレッドシート形式とともに、レガシーXLSと最新のXLSX形式の両方をシームレスに処理します。 Microsoft.Office.Interop.Excelに依存するソリューションとは異なり、IronXLは.NETまたは.NET Coreプラットフォーム上で独立して動作します。

How to Easily Import, Read, and Manipulate MS Excel File Data in C# Using IronXL: Image 2 - Cross Platform.

まず、NuGet Package Manager経由でIronXLをインストールするか、Visual StudioでManage NuGet packagesを選択してください:

Install-Package IronXL.Excel

How to Easily Import, Read, and Manipulate MS Excel File Data in C# Using IronXL: Image 3 - Installation.

一度インストールすれば、Excelデータのインポートは驚くほど簡単になります:

using IronXL;
static void Main(string[] args)
{
 // Load any Excel file
 WorkBook workBook = WorkBook.Load("ProductData.xlsx");
 // Access the first worksheet
 WorkSheet sheet = workBook.WorkSheets[0];
 // Read a cell value
 string value = sheet["B1"].StringValue;
 Console.WriteLine(value);
}
using IronXL;
static void Main(string[] args)
{
 // Load any Excel file
 WorkBook workBook = WorkBook.Load("ProductData.xlsx");
 // Access the first worksheet
 WorkSheet sheet = workBook.WorkSheets[0];
 // Read a cell value
 string value = sheet["B1"].StringValue;
 Console.WriteLine(value);
}
Imports IronXL

Module Program
    Sub Main(args As String())
        ' Load any Excel file
        Dim workBook As WorkBook = WorkBook.Load("ProductData.xlsx")
        ' Access the first worksheet
        Dim sheet As WorkSheet = workBook.WorkSheets(0)
        ' Read a cell value
        Dim value As String = sheet("B1").StringValue
        Console.WriteLine(value)
    End Sub
End Module
$vbLabelText   $csharpLabel

このコードは、ワークブックをロードし、ワークシートにアクセスし、セルの値を読み取るという、中核となるワークフローを示しています。 WorkBook.Load()メソッドは、XLS、XLSX、あるいはCSVなど、ファイル形式を自動的に検出します。直感的なインデクサ構文sheet["B1"]は、配列を扱うように自然にセルにアクセスします。 より複雑な操作については、IronXL API referenceで包括的なドキュメントを確認してください。

サンプル入力

How to Easily Import, Read, and Manipulate MS Excel File Data in C# Using IronXL: Image 4 - Excel Input.

出力

How to Easily Import, Read, and Manipulate MS Excel File Data in C# Using IronXL: Image 5 - Console Output.

ExcelのデータをC#オブジェクトに読み込むには?

実際のアプリケーションでは、単一セルの値以上のものが必要です。 IronXLはデータセット全体をインポートし、使用可能なC#オブジェクトに変換することを得意としています。 構造化データを含むExcelファイルをインポートする必要がある場合、ライブラリは複数のアプローチを提供します。

// Load the Excel file
WorkBook workBook = WorkBook.Load("ProductData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
// Read a range of cells
 var products = new List<Product>();
 foreach (var row in sheet.Rows)
 {
     var product = new Product
     {
         Id = row.Columns[0].IntValue,
         Name = row.Columns[1].StringValue,
         Price = row.Columns[2].DecimalValue,
         IsAvailable = row.Columns[3].BoolValue
     };
     products.Add(product);
 }
 foreach (var product in products)
 {
     Console.WriteLine($"Id: {product.Id}, Name: {product.Name}, Price: {product.Price}, Available: {product.IsAvailable}");
 }
// Load the Excel file
WorkBook workBook = WorkBook.Load("ProductData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
// Read a range of cells
 var products = new List<Product>();
 foreach (var row in sheet.Rows)
 {
     var product = new Product
     {
         Id = row.Columns[0].IntValue,
         Name = row.Columns[1].StringValue,
         Price = row.Columns[2].DecimalValue,
         IsAvailable = row.Columns[3].BoolValue
     };
     products.Add(product);
 }
 foreach (var product in products)
 {
     Console.WriteLine($"Id: {product.Id}, Name: {product.Name}, Price: {product.Price}, Available: {product.IsAvailable}");
 }
Imports System
Imports System.Collections.Generic

' Load the Excel file
Dim workBook As WorkBook = WorkBook.Load("ProductData.xlsx")
Dim sheet As WorkSheet = workBook.DefaultWorkSheet
' Read a range of cells
Dim products As New List(Of Product)()
For Each row In sheet.Rows
    Dim product As New Product With {
        .Id = row.Columns(0).IntValue,
        .Name = row.Columns(1).StringValue,
        .Price = row.Columns(2).DecimalValue,
        .IsAvailable = row.Columns(3).BoolValue
    }
    products.Add(product)
Next
For Each product In products
    Console.WriteLine($"Id: {product.Id}, Name: {product.Name}, Price: {product.Price}, Available: {product.IsAvailable}")
Next
$vbLabelText   $csharpLabel

この例では、行を繰り返し処理し、Excelデータを強く型付けされたC#オブジェクトにマッピングする方法を示します。 IntValue、StringValue、DecimalValueのような型付きプロパティは、型変換を自動的に処理します。 このアプローチにより、手作業による解析が不要になり、異なるデータ型を扱う際のエラーを減らすことができます。Stack Overflow の多くの開発者は、Excel データ インポートに対するこのタイプセーフ アプローチを高く評価しています。

出力

How to Easily Import, Read, and Manipulate MS Excel File Data in C# Using IronXL: Image 6 - Object Output.

よりエレガントなデータアクセスのために、IronXLは範囲演算をサポートしています:

// Read specific ranges of ProductData.xlsx file
Range dataRange = sheet["A1:D5"];
// Calculate aggregates directly
decimal sum = sheet["C1:C5"].Sum();
Console.WriteLine($"Sum of C1:C5: {sum}");
decimal max = sheet["C1:C5"].Max(c => c.DecimalValue);
Console.WriteLine($"Max of C1:C5: {max}");
// Use LINQ for filtering
var highValueOrders = dataRange
    .Where(cell => cell.DecimalValue > 100)
    .Select(cell => cell.Value)
    .ToList();
Console.WriteLine("High value orders (>100):");
// Print the high value orders to the console
foreach (var order in highValueOrders)
{
    Console.WriteLine(order);
}
// Read specific ranges of ProductData.xlsx file
Range dataRange = sheet["A1:D5"];
// Calculate aggregates directly
decimal sum = sheet["C1:C5"].Sum();
Console.WriteLine($"Sum of C1:C5: {sum}");
decimal max = sheet["C1:C5"].Max(c => c.DecimalValue);
Console.WriteLine($"Max of C1:C5: {max}");
// Use LINQ for filtering
var highValueOrders = dataRange
    .Where(cell => cell.DecimalValue > 100)
    .Select(cell => cell.Value)
    .ToList();
Console.WriteLine("High value orders (>100):");
// Print the high value orders to the console
foreach (var order in highValueOrders)
{
    Console.WriteLine(order);
}
' Read specific ranges of ProductData.xlsx file
Dim dataRange As Range = sheet("A1:D5")
' Calculate aggregates directly
Dim sum As Decimal = sheet("C1:C5").Sum()
Console.WriteLine($"Sum of C1:C5: {sum}")
Dim max As Decimal = sheet("C1:C5").Max(Function(c) c.DecimalValue)
Console.WriteLine($"Max of C1:C5: {max}")
' Use LINQ for filtering
Dim highValueOrders = dataRange _
    .Where(Function(cell) cell.DecimalValue > 100) _
    .Select(Function(cell) cell.Value) _
    .ToList()
Console.WriteLine("High value orders (>100):")
' Print the high value orders to the console
For Each order In highValueOrders
    Console.WriteLine(order)
Next
$vbLabelText   $csharpLabel

Rangeクラスは、複数のセルに同時にアクセスするコレクションのような機能を提供します。 LINQとの互換性は、開発者が使い慣れたC#パターンを使用してExcelデータをフィルタリング、変換、集計できることを意味します。 Sum()やMax()のような組み込みの集計メソッドは、最初にすべてのデータをメモリにロードすることなく、セル範囲に対して直接操作します。

出力

How to Easily Import, Read, and Manipulate MS Excel File Data in C# Using IronXL: Image 7 - Range Output.

ExcelをDataTableに変換するには?

DataTableの変換は、データベース操作とデータバインディングのシナリオに不可欠です。 IronXLはExcelからDataTableへの変換を効率的に処理する組み込みメソッドを提供します。この機能はExcelスプレッドシートをSQL Serverやその他のデータベースにインポートする必要がある場合に特に便利です。

using System.Data;
// Load Excel file
WorkBook workBook = WorkBook.Load("inventory.xlsx");
// Select first Excel worksheet
WorkSheet sheet = workBook.WorkSheets.First();
// Convert to DataTable with headers
DataTable dataTable = sheet.ToDataTable(true);
// The DataTable is ready for database operations
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString))
{
    bulkCopy.DestinationTableName = "Inventory";
    bulkCopy.WriteToServer(dataTable);
}
using System.Data;
// Load Excel file
WorkBook workBook = WorkBook.Load("inventory.xlsx");
// Select first Excel worksheet
WorkSheet sheet = workBook.WorkSheets.First();
// Convert to DataTable with headers
DataTable dataTable = sheet.ToDataTable(true);
// The DataTable is ready for database operations
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString))
{
    bulkCopy.DestinationTableName = "Inventory";
    bulkCopy.WriteToServer(dataTable);
}
Imports System.Data

' Load Excel file
Dim workBook As WorkBook = WorkBook.Load("inventory.xlsx")
' Select first Excel worksheet
Dim sheet As WorkSheet = workBook.WorkSheets.First()
' Convert to DataTable with headers
Dim dataTable As DataTable = sheet.ToDataTable(True)
' The DataTable is ready for database operations
Using bulkCopy As New SqlBulkCopy(connectionString)
    bulkCopy.DestinationTableName = "Inventory"
    bulkCopy.WriteToServer(dataTable)
End Using
$vbLabelText   $csharpLabel

ToDataTable() メソッドは、最初の行にヘッダが含まれているかどうかを示す boolean パラメータを受け付けます。 Trueに設定すると、IronXLは自動的に最初の行の値をDataTableの列名として使用します。 このDataTableは、ADO.NET操作、Entity Framework、およびデータバインディングコントロールとシームレスに統合されています。 SqlBulkCopyに関するMicrosoftのドキュメントでは、このパターンがいかに効率的に大規模なデータのインポートを処理するかを示しています。

変換プロセスをよりコントロールするために

// Custom DataTable conversion
DataTable customTable = new DataTable();
// Define columns based on Excel structure
for (int col = 0; col < sheet.ColumnCount; col++)
{
    customTable.Columns.Add($"Column{col + 1}", typeof(string));
}
// Import data with validation
foreach (var row in sheet.Rows)
{
    var dataRow = customTable.NewRow();
    for (int col = 0; col < sheet.ColumnCount; col++)
    {
        dataRow[col] = row.Columns[col].Value ?? DBNull.Value;
    }
    customTable.Rows.Add(dataRow);
}
// Print column headers
foreach (DataColumn column in customTable.Columns)
{
    Console.Write($"{column.ColumnName}\t");
}
Console.WriteLine();
// Print each row
foreach (DataRow row in customTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item}\t");
    }
    Console.WriteLine();
}
// Custom DataTable conversion
DataTable customTable = new DataTable();
// Define columns based on Excel structure
for (int col = 0; col < sheet.ColumnCount; col++)
{
    customTable.Columns.Add($"Column{col + 1}", typeof(string));
}
// Import data with validation
foreach (var row in sheet.Rows)
{
    var dataRow = customTable.NewRow();
    for (int col = 0; col < sheet.ColumnCount; col++)
    {
        dataRow[col] = row.Columns[col].Value ?? DBNull.Value;
    }
    customTable.Rows.Add(dataRow);
}
// Print column headers
foreach (DataColumn column in customTable.Columns)
{
    Console.Write($"{column.ColumnName}\t");
}
Console.WriteLine();
// Print each row
foreach (DataRow row in customTable.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write($"{item}\t");
    }
    Console.WriteLine();
}
Imports System
Imports System.Data

' Custom DataTable conversion
Dim customTable As New DataTable()
' Define columns based on Excel structure
For col As Integer = 0 To sheet.ColumnCount - 1
    customTable.Columns.Add($"Column{col + 1}", GetType(String))
Next
' Import data with validation
For Each row In sheet.Rows
    Dim dataRow = customTable.NewRow()
    For col As Integer = 0 To sheet.ColumnCount - 1
        dataRow(col) = If(row.Columns(col).Value, DBNull.Value)
    Next
    customTable.Rows.Add(dataRow)
Next
' Print column headers
For Each column As DataColumn In customTable.Columns
    Console.Write($"{column.ColumnName}" & vbTab)
Next
Console.WriteLine()
' Print each row
For Each row As DataRow In customTable.Rows
    For Each item In row.ItemArray
        Console.Write($"{item}" & vbTab)
    Next
    Console.WriteLine()
Next
$vbLabelText   $csharpLabel

このアプローチは、インポート時のデータ変換に柔軟性をもたらします。 Null値は、DBNull.Valueに変換することで潔く処理し、データベース操作との互換性を確保しています。

出力

How to Easily Import, Read, and Manipulate MS Excel File Data in C# Using IronXL: Image 8 - DataTable Output.

どのような高度な機能がデータ操作をサポートしますか?

IronXLは複雑なシナリオに対応する強力な機能を備え、基本的な読み方を超えています。 ライブラリはExcelの数式を保持し、計算を動的に更新できるようにします。 複雑なExcelワークブックを扱う開発者のために、インポート処理全体を通してデータの整合性を維持します。

How to Easily Import, Read, and Manipulate MS Excel File Data in C# Using IronXL: Image 9 - Features.

// Read calculated values from formulas
WorkSheet sheet = workBook.GetWorkSheet("Reports");
decimal calculatedTotal = sheet["E10"].DecimalValue; // Reads formula result
// Formulas remain intact
string formula = sheet["E10"].Formula; // Returns "=SUM(E2:E9)"
// Read calculated values from formulas
WorkSheet sheet = workBook.GetWorkSheet("Reports");
decimal calculatedTotal = sheet["E10"].DecimalValue; // Reads formula result
// Formulas remain intact
string formula = sheet["E10"].Formula; // Returns "=SUM(E2:E9)"
' Read calculated values from formulas
Dim sheet As WorkSheet = workBook.GetWorkSheet("Reports")
Dim calculatedTotal As Decimal = sheet("E10").DecimalValue ' Reads formula result
' Formulas remain intact
Dim formula As String = sheet("E10").Formula ' Returns "=SUM(E2:E9)"
$vbLabelText   $csharpLabel

数式サポートとは、複雑な計算を含むExcelファイルのインポートが、ビジネスロジックを再作成することなく機能することを意味します。 このライブラリは数式を自動的に評価し、元の数式構造を保持したまま計算値を返します。 この機能は、財務モデルや報告テンプレートを含むExcelファイルを読む必要がある場合に、非常に貴重です。

クロスプラットフォーム互換性により、Windows、Linux、macOS、コンテナ環境で一貫した動作が保証されます。 この柔軟性により、IronXLはOfficeのインストールが不可能なクラウド・デプロイメントやマイクロサービス・アーキテクチャに理想的です。 .NET Foundationのドキュメントは、Excelデータをインポートする際に、最新の.NETアプリケーションがこのプラットフォームの独立性からどのような恩恵を受けているかを強調しています。

Entity Frameworkの統合により、C# Excelインポートシナリオのデータベースワークフローが効率化されます:

var products = sheet.Rows.Skip(1)
    .Select(row => new Product
    {
        Name = row.Columns[0].StringValue,
        Price = row.Columns[1].DecimalValue
    })
    .ToList();
using (var context = new AppDbContext())
{
    context.Products.AddRange(products);
    await context.SaveChangesAsync();
}
var products = sheet.Rows.Skip(1)
    .Select(row => new Product
    {
        Name = row.Columns[0].StringValue,
        Price = row.Columns[1].DecimalValue
    })
    .ToList();
using (var context = new AppDbContext())
{
    context.Products.AddRange(products);
    await context.SaveChangesAsync();
}
Imports System.Linq

Dim products = sheet.Rows.Skip(1) _
    .Select(Function(row) New Product With {
        .Name = row.Columns(0).StringValue,
        .Price = row.Columns(1).DecimalValue
    }).ToList()

Using context As New AppDbContext()
    context.Products.AddRange(products)
    Await context.SaveChangesAsync()
End Using
$vbLabelText   $csharpLabel

このパターンは、最小限のコードでExcelからデータベースへの直接パイプラインを可能にし、データ移行やETLプロセスに最適です。 包括的なExcel操作機能については、IronXLをダウンロードしてデータ・インポート・ワークフローを合理化してください。

結論

IronXLはExcelデータのインポートを複雑な課題から簡単なC#コードに変換します。 このライブラリの直感的なAPI、包括的なフォーマットのサポート、クロスプラットフォームの互換性は、Excelファイルの操作を必要とするプロダクションアプリケーションにとって実用的な選択肢となっています。

How to Easily Import, Read, and Manipulate MS Excel File Data in C# Using IronXL: Image 10 - Licensing.

ExcelファイルをC#プロジェクトにインポートする準備はできましたか? 無料トライアルを開始してIronXLの全機能をお試しください。 詳細な実装ガイダンスについては、完全なドキュメントを参照してください。 本番デプロイメントについては、ライセンスオプションを表示して、チームに合ったものを見つけてください。

よくある質問

C#でExcelデータをインポートするにはどうすればよいですか?

IronXLを使用すると、Microsoft Excelがシステムにインストールされていなくても、C#でExcelデータを簡単にインポートできます。

Excelファイル操作にIronXLを使用する利点は何ですか?

IronXLは、開発者が複雑な依存関係なしにC#でExcelファイルを読み書き、操作することを可能にし、さまざまなプラットフォームで動作します。

IronXLを使用するためにMicrosoft Officeをインストールする必要がありますか?

IronXLはMicrosoft Officeのインストールを不要にし、C#アプリケーション内でExcelファイルを直接操作できるようにします。

IronXLはXLSXとCSVの両方のファイル形式を扱えますか?

IronXLはXLSXやCSVを含む様々なExcelファイル形式をサポートしています。

IronXLは大きなExcelファイルの処理に適していますか?

IronXLは大きなExcelファイルを効率的に処理するように設計されており、開発者はパフォーマンスの問題なしに膨大なデータセットを処理することができます。

IronXLはどのようなプラットフォームをサポートしていますか?

IronXLは複数のプラットフォームと互換性があり、Excelファイルを扱うアプリケーションのクロスプラットフォーム開発とデプロイを可能にします。

IronXLはExcelからデータベースへのデータ移行をどのように簡素化しますか?

IronXLはExcelシートからデータを読み込んでエクスポートする簡単な方法を提供し、複雑なコーディングなしにデータベースへのデータ転送を容易にします。

IronXLを使ってExcelのレポート作成を自動化できますか?

IronXLはExcelレポート生成の自動化を可能にし、C#でExcelファイルをプログラムで作成、操作できるようにします。

IronXLは小規模からエンタープライズレベルのアプリケーションまで対応できますか?

IronXLは多用途で拡張性があるため、小規模なプロジェクトからエクセルファイルの操作を必要とする大規模なエンタープライズレベルのアプリケーションまで適しています。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。