IRONSOFTWAREHOME
IRONXLの使用

C# で CSV をインポートする | ASP.NET Coreチュートリアル | IronXL

Curtis Chau
Curtis Chau
Updated: 2026年6月28日

ASP.NET Coreで C# から CSV ファイルをインポートする場合、ファイル ストリームを読み込み、区切り文字で区切られた行を解析し、各レコードを型付きオブジェクトにマッピングする必要があります。これらはすべて、データを使って何らかの有用な処理を行う前に実行する必要がある処理です。 IronXLは、CSV、XLSX、TSVファイルすべてに同様に機能する単一のAPIを通じてすべてのステップを処理するため、文字列分割の特殊なケースに時間を費やすのではなく、アプリケーションロジックの開発に集中できます。

無料トライアルを開始して、これらのコード例を自分の環境で試してみましょう。

.NETプロジェクトにIronXLをインストールするにはどうすればよいですか?

解析コードを記述する前に、プロジェクトにIronXLを追加してください。 Visual Studio のパッケージ マネージャー コンソール、またはプロジェクト ディレクトリのターミナルを開き、次のいずれかのコマンドを実行します。

PM > Install-Package IronXL.Excel

このパッケージは、.NET 10、 .NET 6以降、 .NET Framework 4.6.2以降、および.NET Standard 2.0を対象としているため、あらゆる種類の最新プロジェクトに対応できます。 サーバーにMicrosoft Officeをインストールする必要はありません。 パッケージが復元された後、ライブラリを呼び出すファイルの上部にusing IronXL;を追加してください。

グローバルなツールのインストールやCI/CDパイプラインの設定など、詳細なセットアップオプションについては、IronXLのインストールガイドをご覧ください。

ASP.NET CoreでCSVファイルをインポートするにはどうすればよいですか?

ASP.NET CoreでCSVファイルをインポートするには、サーバーからファイルストリームを読み込み、各行を解析し、値をモデルクラスにマッピングする必要があります。 一部の開発者は手動のStreamReader実装やサードパーティのパッケージを利用しますが、IronXLは追加の設定なしでCSVファイルとExcel形式を扱う単一のメソッドを提供します。

次のコードは、IronXLのWorkBook.LoadCSVメソッドを使用してCSVファイルを読み込む方法を示しています。

using IronXL;

// Load the CSV file directly using the full file path
var csv = WorkBook.LoadCSV("products.csv");
WorkSheet worksheet = csv.DefaultWorkSheet;

// Access CSV data by iterating through rows
foreach (var row in worksheet.Rows)
{
    string productName = row.Columns[1].StringValue;
    decimal price = row.Columns[2].DecimalValue;
    Console.WriteLine($"Product: {productName}, Price: {price}");
}

WorkBook.LoadCSV メソッドの理解

WorkBook.LoadCSVメソッドはCSVファイルを読み取り、各行を行として、各区切り値をセルとしてワークシートを作成します。 IronXLは区切り文字(カンマ、セミコロン、タブ)を自動的に検出し、値の中にカンマが含まれる引用符付きフィールドを処理します。 標準的なCSVファイルの場合、区切り文字を手動で設定する必要はありません。

decimal.Parseによる解析を避けることができます。 セルが空の場合、または認識されない値が含まれている場合、これらのアクセサーは例外をスローするのではなく、型のデフォルト値を返します。これにより、一括インポート操作中に未処理のエラーが発生するのを防ぎます。

このアプローチにより、カスタム実装で必要となるエラーが発生しやすい手動の文字列解析が不要になります。特に、エスケープされた引用符、Windowsスタイルの改行コード、複数行のセル値といった特殊なケースにおいて有効です。 サポートされているフォーマットと区切り文字オ​​プションの詳細については、 IronXL CSV のドキュメントを参照してください。

ASP Import CSV: A Complete C# Developer's Guide: Image 1 - シンプルなCSVファイルをインポートし、コンソールで出力を読み取る

CSVデータ用のモデルクラスを作成するにはどうすればよいですか?

CSVデータを厳密に型指定されたオブジェクトにマッピングするには、ファイル構造を反映したモデルクラスが必要です。 生の文字列データを、整数、小数、日時値などの特定の型に変換します。 製品在庫データについては、各CSV列に対応するプロパティを持つクラスを作成します。

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; } = string.Empty;
    public decimal Price { get; set; }
    public int Quantity { get; set; }
}

CSV行を型付きコレクションに解析する

モデルクラスを定義することで、CSVレコードを型付きコレクションに解析できます。 次の例は、ループインデックスを使用してヘッダ行をスキップし、その後の各行をProductオブジェクトにマッピングします。

using IronXL;

WorkBook workbook = WorkBook.LoadCSV("inventory.csv");
WorkSheet ws = workbook.DefaultWorkSheet;
var records = new List<Product>();

// Skip header row (index 0), iterate through data rows
for (int i = 1; i < ws.Rows.Count(); i++)
{
    var row = ws.Rows[i];
    var product = new Product
    {
        Id = row.Columns[0].IntValue,
        Name = row.Columns[1].StringValue,
        Price = row.Columns[2].DecimalValue,
        Quantity = row.Columns[3].IntValue
    };
    records.Add(product);
}

Console.WriteLine($"Loaded {records.Count} products.");

Productオブジェクトが含まれるようになりました。 IronXLのセル値アクセサーは、型変換を自動的に処理します。これには、オプションフィールドのnull値処理も含まれます。

オプションフィールドとnull許容フィールドの扱い方

実際のCSVファイルには、空のセルやオプションの列が含まれていることがよくあります。 IronXL の値アクセサーは、セルが空白の場合、例外ではなくデフォルト値を返します。 null許容型の場合は、条件チェックを使用できます。

// Reading an optional DateTime field
DateTime? lastUpdated = string.IsNullOrEmpty(row.Columns[4].StringValue)
    ? null
    : row.Columns[4].DateTimeValue;

このパターンでは、すべてのセルアクセスをtry-catchブロックで囲むことなく、インポートコードの防御性を維持できます。 複雑なデータ型や大容量ファイルの取り扱いに関するガイダンスについては、 IronXL WorkSheet のドキュメントを参照してください。

Web APIでCSVファイルのアップロードを処理するにはどうすればよいでしょうか?

ブラウザからCSVファイルをアップロードするAPIエンドポイントを構築するには、ASP.NET CoreのIFormFileとIronXLの解析機能を組み合わせる必要があります。 以下のコードは、アップロードされたファイルを解析し、JSONレスポンスを返すコントローラーの完全な実装例を示しています。

using IronXL;
using Microsoft.AspNetCore.Mvc;

[Route("api/[controller]")]
[ApiController]
public class CsvController : ControllerBase
{
    [HttpPost("upload")]
    public async Task<IActionResult> UploadCsv(IFormFile file)
    {
        if (file == null || file.Length == 0)
            return BadRequest("Please upload a valid CSV file.");

        try
        {
            using var stream = new MemoryStream();
            await file.CopyToAsync(stream);
            stream.Position = 0;

            WorkBook workbook = WorkBook.Load(stream, "csv");
            WorkSheet ws = workbook.DefaultWorkSheet;
            var records = new List<Product>();

            // Skip header row, iterate through data rows
            for (int i = 1; i < ws.Rows.Count(); i++)
            {
                var row = ws.Rows[i];
                records.Add(new Product
                {
                    Id = row.Columns[0].IntValue,
                    Name = row.Columns[1].StringValue,
                    Price = row.Columns[2].DecimalValue,
                    Quantity = row.Columns[3].IntValue
                });
            }

            return Ok(new
            {
                message = "Import successful",
                count = records.Count,
                data = records
            });
        }
        catch (Exception ex)
        {
            return BadRequest($"Error processing file: {ex.Message}");
        }
    }
}

エンドポイントとマルチパートフォームの設定

[HttpPost("upload")]アクションでファイルアップロードを受け入れるには、プロジェクトがマルチパートフォームデータをサポートする必要があります。 ミニマルAPI設定のためにapp.MapControllers()を呼び出したことを確認してください。 エンドポイントは/api/csv/uploadでアクセス可能になります。

ブラウザフォームからテストする際、フォームのmultipart/form-dataに設定し、ファイル入力要素を使用してください。 APIクライアント(例:Postman)の場合、リクエストボディで"form-data"を選択し、fileというキーを追加してCSVファイルを添付します。コントローラは、レコード数と解析されたデータ配列を含むJSONオブジェクトを返します。クライアント側 for JavaScriptはすぐにこれを利用できます。

ASP Import CSV: A Complete C# Developer's Guide: Image 2 - インポートしたCSVファイルから読み取ったデータによる成功した出力

解析前にファイルタイプを検証する

IronXLにストリームを渡す前に、ファイル拡張子を検証して、CSV以外のファイルのアップロードを拒否します。

var extension = Path.GetExtension(file.FileName).ToLowerInvariant();
if (extension != ".csv" && extension != ".txt")
    return BadRequest("Only CSV files are accepted.");

このチェックにより、不正な形式のバイナリデータがパーサーに到達するのを防ぎ、API利用者に対して明確なエラーメッセージを提供します。 このバリデーションを拡張してfile.ContentTypeを使用してMIMEタイプを確認し、より厳密な確認を行うことができます。

CSVデータをデータベースに保存するにはどうすればよいですか?

CSVファイルを型付きオブジェクトに解析した後、通常はそのレコードをデータベースに保存します。 次の例は、Entity Framework CoreのAddRangeAsyncを使用してバルク挿入を行うことでサービス層パターンを拡張しています。

using IronXL;

public class CsvImportService
{
    private readonly AppDbContext _context;

    public CsvImportService(AppDbContext context)
    {
        _context = context;
    }

    public async Task<int> ImportProductsAsync(Stream csvStream)
    {
        WorkBook workbook = WorkBook.LoadCSV(csvStream);
        WorkSheet ws = workbook.DefaultWorkSheet;
        var products = new List<Product>();

        foreach (var row in ws.Rows.Skip(1))
        {
            products.Add(new Product
            {
                Id = row.Columns[0].IntValue,
                Name = row.Columns[1].StringValue,
                Price = row.Columns[2].DecimalValue,
                Quantity = row.Columns[3].IntValue
            });
        }

        await _context.Products.AddRangeAsync(products);
        return await _context.SaveChangesAsync();
    }
}

サービスを依存性注入に組み込む

コントローラがコンストラクタインジェクションを介してそれを要求できるように、Program.csに登録します。

builder.Services.AddScoped<CsvImportService>();

その後、コントローラのコンストラクタを更新し、サービスを受け入れてImportProductsAsyncを呼び出します。これにより、インラインでリストを構築する代わりに、コントローラアクションがシンプルになり、データアクセスロジックをテスト可能なサービスクラスに移行します。 Entity Framework CoreはCSVファイルに数千行が含まれている場合に、INSERTステートメントにバッチ処理します。

大規模なインポート(数万行)では、EF CoreのBulk Extensionsまたは生のSQL BULK INSERTステートメントを使用してデータベースへの往復を減少させることを検討してください。

IronXLを使用してデータをCSV形式にエクスポートするにはどうすればよいですか?

IronXLはCSVファイルの読み込みだけでなく、書き込みも可能です。 SaveAsCsvメソッドは、任意のワークシートをCSVファイルにエクスポートします。これは、レポートを生成したり、下流システムにデータを送信したりするのに便利です。

using IronXL;

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLS);
WorkSheet ws = workbook.DefaultWorkSheet;

// Write headers
ws["A1"].Value = "Id";
ws["B1"].Value = "Name";
ws["C1"].Value = "Price";

// Write data rows
ws["A2"].Value = 1;
ws["B2"].Value = "Widget A";
ws["C2"].Value = 9.99;

ws["A3"].Value = 2;
ws["B3"].Value = "Widget B";
ws["C3"].Value = 14.49;

// Save as CSV
workbook.SaveAsCsv("export.csv");
Console.WriteLine("CSV export complete.");

エクスポートされたファイルは、デフォルトでカンマ区切り文字を使用します。 ヨーロッパのロケールによく見られるセミコロン区切りのファイルの場合は、明示的な区切り文字引数と共にSaveAsCsv("export.csv", ";")を呼び出します。 また、File(stream, "text/csv", "export.csv")を使用してAPIエンドポイントからファイルダウンロードとして結果を返すこともできます。

エクスポートオプションの完全なリファレンスについては、IronXL保存とエクスポートドキュメントをご覧ください。

IronXLが手動によるCSV解析よりも優れた選択肢である理由とは?

手動でのCSV解析は一見簡単そうに見えますが、引用符で囲まれたカンマ、セル内に埋め込まれた改行、エスケープされた引用符、UTF-8ファイルの先頭にあるバイトオーダーマークなど、特殊なケースに遭遇すると難しくなります。 カスタムStreamReaderループでこれらを正しく処理するには、かなりのテストと継続的なメンテナンスが必要です。

IronXLはこれらのケースすべてに社内で対応しています。 2つのアプローチを比較すると、明確な利点が明らかになる。

C#におけるCSV解析のためのIronXLと手動StreamReaderの比較
能力IronXLマニュアルStreamReader
区切り文字の自動検出はいいいえ、手動で設定する必要があります
見積もり現場処理組み込みカスタムロジックが必要です
型変換(int、decimal、DateTime)内蔵アクセサリーParse/TryParse呼び出しが必要です
複数行のセル値自動的に処理されます正しく実装するのが難しい
BOMの取り扱い自動翻訳StreamReaderの設定が必要です
Excel形式(XLSX、XLS)に対応同じAPI別途ライブラリが必要です
CSVへのエクスポートSaveAsCsvメソッド別途書き込みロジックが必要

フォーマット間の一貫性

IronXLの実用的な利点の1つは、同じWorkBook.Loadとワークシート反復パターンがXLSX、XLS、ODS、およびCSVファイルに対して機能することです。 アプリケーションがユーザーから複数のスプレッドシート形式を受け入れる必要がある場合、解析ロジックを変更することなく形式を切り替えることができます。 ファイルストリームをWorkBook.Loadに渡すと、IronXLがファイル署名に基づいてフォーマットを自動的に検出します。

このクロスフォーマットAPIにより、CSVとExcel用に別々の実装を維持する必要がなく、1つのコードパスを記述してテストするだけで済みます。 サポートされているファイル形式の完全なリストについては、 IronXLのサポート対象ファイル形式ページを参照してください。

大容量ファイルに関するパフォーマンス上の考慮事項

100MB以下のCSVファイルであれば、 IronXLはチューニングなしでも十分に機能します。 より大きなファイルの場合は、以下の戦略を検討してください。

  • メモリ割り当てを削減するためにファイルをMemoryStreamにコピーするのではなく、パスから読み込みます。
  • データベースに挿入する際に、最初の挿入前にすべてのレコードを収集するのではなく、行をバッチ処理する。
  • LINQとProductオブジェクトとして実体化しないようにします。

IronXL パフォーマンスガイドでは、大量のインポートシナリオにおける並列処理やストリーミングモードなどの追加の最適化について説明しています。

次のステップは何ですか?

これで、 ASP.NET Coreでの CSV インポートのすべての段階(ライブラリのインストール、ディスクまたはアップロードされたストリームからのファイルの読み込み、行を型付きモデルオブジェクトにマッピング、Entity Framework Core を使用してレコードをデータベースに永続化、必要に応じてデータを CSV にエクスポートする)に対応する動作パターンが揃いました。

この基礎の上にさらに知識を深めるために、以下のリソースをご活用ください。

プロジェクトにIronXLを組み込めば、CSVの他にXLSXアップロードのサポートを追加するためにコード変更は不要です。同じWorkBook.Load呼び出しがどちらも処理します。 その一貫性により、アプリケーションの要件が拡大するにつれて、インポートエンドポイントの機能セットを段階的に拡張することができます。

Curtis Chau
テクニカルライター

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

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。