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

ExcelDataReaderがExcelファイルを書き込む:ExcelDataReaderがExcelファイルを書けない理由とIronXLによる解決方法

多くの開発者は、C#でExcelファイルを処理するための軽量なソリューションを探す際に、ExcelDataReaderを利用します。 ライブラリ名からはExcelを完全に操作できる能力があるように聞こえるが、根本的な制限がすぐに明らかになる。ExcelDataReaderはExcelファイルへの書き込みを一切できないのだ。 このガイドでは、よくある誤解を解消し、その背後にあるアーキテクチャ上の理由を説明し、 IronXLが単一の統合された.NETライブラリで真の双方向Excelサポート(読み書き両方)を提供することで、どのようにこの問題を解決するのかを示します。

このチュートリアルを終える頃には、ExcelDataReaderが設計上読み取り専用である理由、既存の読み取りロジックをIronXLに移行する方法、そしてMicrosoft Officeに一切依存することなく、ワークブックの作成、セル値の書き込み、数式の適用、データの書式設定、出力ファイルの保存を行う完全なExcelワークフローを構築する方法が理解できるでしょう。

ExcelDataReader は Excel ブックのデータを書き込むことができますか?

ExcelDataReader が Excel ファイルを書き込む: なぜできないのか、そしてIronXL がどのように解決するのか: 画像 1 - ExcelDataReader

いいえ。ExcelDataReaderは設計上、読み取り専用ライブラリであり、その制限は意図的なものです。 ExcelDataReaderの公式GitHubリポジトリでは、このプロジェクトは"Microsoft Excelファイルを読み取るためのライブラリ"であると明示的に説明されており、公開されているインターフェースには書き込みAPI、保存メソッド、セル値設定機能などは一切存在しない。 ExcelDataReader NuGetパッケージのページを参照すれば、このことをご自身で確認できます。パッケージの説明には、読み取り専用のスコープであることが明記されています。

ExcelDataReaderは、XLS、XLSX、CSV形式のファイルの読み込みをサポートしており、その処理を効率的に行います。 このライブラリは、 .NETのIDataReaderに似た、ストリーミングによる前方のみのリーダー パターンを提供します。 そのアーキテクチャは大規模なデータセットを迅速に抽出するのに適しているが、Excelでの書き込みに必要なランダムアクセスかつ可変的なモデルとは根本的に相容れない。

以下のコードは、ExcelDataReaderで発生する上限を示しています。

using ExcelDataReader;
using System.Text;

// Register the encoding provider required for .NET 5+
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

using var stream = File.Open("source.xlsx", FileMode.Open, FileAccess.Read);
using var reader = ExcelReaderFactory.CreateReader(stream);

while (reader.Read())
{
    string cellValue = reader.GetString(0); // Read a cell value
    Console.WriteLine(cellValue);
    // There is no Write(), Save(), or SetCellValue() method here
}
using ExcelDataReader;
using System.Text;

// Register the encoding provider required for .NET 5+
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

using var stream = File.Open("source.xlsx", FileMode.Open, FileAccess.Read);
using var reader = ExcelReaderFactory.CreateReader(stream);

while (reader.Read())
{
    string cellValue = reader.GetString(0); // Read a cell value
    Console.WriteLine(cellValue);
    // There is no Write(), Save(), or SetCellValue() method here
}
Imports ExcelDataReader
Imports System.Text
Imports System.IO

' Register the encoding provider required for .NET 5+
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)

Using stream = File.Open("source.xlsx", FileMode.Open, FileAccess.Read)
    Using reader = ExcelReaderFactory.CreateReader(stream)
        While reader.Read()
            Dim cellValue As String = reader.GetString(0) ' Read a cell value
            Console.WriteLine(cellValue)
            ' There is no Write(), Save(), or SetCellValue() method here
        End While
    End Using
End Using
$vbLabelText   $csharpLabel

Read() を呼び出した後、Write() または Save() に相当するものは存在しません。 アプリケーションでレポートを作成したり、スプレッドシートのセルを更新したり、データをXLSX形式にエクスポートしたり、数式を適用したり、テンプレートを処理したりする必要がある場合、ExcelDataReaderでは必要なツールが何も提供されません。

これはバグではありません。 これは意図的な範囲決定です。 ExcelDataReaderは一つのことをうまくこなすが、それ以上は何もしない。 Excelにデータを書き戻すワークフローには、全く別のライブラリが必要になります。

IronXL はライティングの問題をどのように解決しますか?

ExcelDataReader が Excel ファイルを書き込む: なぜできないのか、そしてIronXL がどのように解決するのか: 画像 2 - IronXL

IronXLは、Microsoft Officeをインストールすることなく、Excelファイルの読み取り、作成、変更、保存を行うための統一されたAPIを提供します。 このライブラリは、Excelワークブックを完全に変更可能な、メモリ上のオブジェクトグラフとして扱います。 ワークブックを読み込むか作成し、参照によって任意のセルに移動し、値や数式を設定し、スタイルを適用してから、SaveAs() を呼び出します。これは、人間が Excel 自体で作業する方法を模倣したワークフローです。

IronXLは、入力と出力の両方でXLSX、XLS、CSV、TSV、およびJSON形式をサポートしています。 .NET 10、 .NET Standard、および.NET Frameworkで動作するため、コンソールアプリケーション、 ASP.NET Core Web API、デスクトップツール、バックグラウンド処理サービスなど、あらゆる用途に適しています。

IronXLのインストール方法を教えてください

以下のいずれかのコマンドを使用して、 NuGetからIronXLをインストールしてください。

Install-Package IronXL
Install-Package IronXL
SHELL
dotnet add package IronXL
dotnet add package IronXL
SHELL

インストール後、IronXL 名前空間が使用可能になります。 COM相互運用機能なし、Office PIAなし、追加のランタイムコンポーネントなし。

初めてのExcelファイルを作成・記述するにはどうすればよいですか?

次の例では、ワークブックをゼロから作成し、ヘッダー行とデータ行を書き込み、トップレベルのステートメントを使用して出力を保存します。

using IronXL;

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.CreateWorkSheet("Report");

// Write header row
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Quantity";
sheet["C1"].Value = "Unit Price";

// Write a data row
sheet["A2"].Value = "Widget";
sheet["B2"].Value = 150;
sheet["C2"].Value = 9.99;

workBook.SaveAs("report.xlsx");
Console.WriteLine("Workbook saved.");
using IronXL;

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.CreateWorkSheet("Report");

// Write header row
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Quantity";
sheet["C1"].Value = "Unit Price";

// Write a data row
sheet["A2"].Value = "Widget";
sheet["B2"].Value = 150;
sheet["C2"].Value = 9.99;

workBook.SaveAs("report.xlsx");
Console.WriteLine("Workbook saved.");
Imports IronXL

Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim sheet As WorkSheet = workBook.CreateWorkSheet("Report")

' Write header row
sheet("A1").Value = "Product"
sheet("B1").Value = "Quantity"
sheet("C1").Value = "Unit Price"

' Write a data row
sheet("A2").Value = "Widget"
sheet("B2").Value = 150
sheet("C2").Value = 9.99

workBook.SaveAs("report.xlsx")
Console.WriteLine("Workbook saved.")
$vbLabelText   $csharpLabel

これは、ExcelDataReaderでは不完全なまま残ってしまうワークフロー全体を置き換えるものです。 クラスラッパーも、static void Main() の儀式もありません。トップレベルのステートメントと保存されたファイルだけです。

IronXLのワークフロー内で、データの読み書きをどのように行うのですか?

よくある要件としては、既存のExcelファイルを読み込み、そのデータを変換し、結果を書き戻すというものがあります。 ExcelDataReaderは最初のステップしか処理しないため、2つ目のライブラリを導入する必要があります。これは不要な複雑さを招き、依存関係の管理オーバーヘッドやバージョン競合の可能性を高めます。

IronXLはパイプライン全体をカバーします。以下の例では、ソースファイルを読み込み、A列から値を読み取り、変換処理を行い、変更後のワークブックを新しいファイルとして保存します。

using IronXL;

WorkBook workBook = WorkBook.Load("source.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;

// Read existing data
string originalValue = sheet["A1"].StringValue;
Console.WriteLine($"Original: {originalValue}");

// Modify existing data
sheet["A1"].Value = originalValue.ToUpper();

// Add new data alongside existing content
sheet["B1"].Value = DateTime.Now.ToString("yyyy-MM-dd");
sheet["C1"].Formula = "=LEN(A1)";

workBook.SaveAs("modified.xlsx");
Console.WriteLine("Modified workbook saved.");
using IronXL;

WorkBook workBook = WorkBook.Load("source.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;

// Read existing data
string originalValue = sheet["A1"].StringValue;
Console.WriteLine($"Original: {originalValue}");

// Modify existing data
sheet["A1"].Value = originalValue.ToUpper();

// Add new data alongside existing content
sheet["B1"].Value = DateTime.Now.ToString("yyyy-MM-dd");
sheet["C1"].Formula = "=LEN(A1)";

workBook.SaveAs("modified.xlsx");
Console.WriteLine("Modified workbook saved.");
Imports IronXL

Dim workBook As WorkBook = WorkBook.Load("source.xlsx")
Dim sheet As WorkSheet = workBook.DefaultWorkSheet

' Read existing data
Dim originalValue As String = sheet("A1").StringValue
Console.WriteLine($"Original: {originalValue}")

' Modify existing data
sheet("A1").Value = originalValue.ToUpper()

' Add new data alongside existing content
sheet("B1").Value = DateTime.Now.ToString("yyyy-MM-dd")
sheet("C1").Formula = "=LEN(A1)"

workBook.SaveAs("modified.xlsx")
Console.WriteLine("Modified workbook saved.")
$vbLabelText   $csharpLabel

WorkBook.Load() 呼び出しは、ファイルを可変オブジェクトとしてメモリに読み込みます。 その後、Excelスタイルの参照を使用してセルを移動し、値を更新し、数式を設定し、保存します。これらすべてが単一のライブラリと単一のAPIパターン内で実行されます。

IronXLはどのような高度な執筆機能をサポートしていますか?

IronXLは、単純なセル割り当てにとどまらず、ビジネスアプリケーションで一般的に必要とされるExcelのあらゆる機能を提供します。

数式と書式設定はどのように適用するのですか?

数式は標準的なExcel構文に従います。 スタイリングには、Excelの書式設定オプションに直接対応する流暢なオブジェクトモデルが使用されます。

using IronXL;
using IronXl.Styles;

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.CreateWorkSheet("Analytics");

// Write labels
sheet["A1"].Value = "Revenue";
sheet["B1"].Value = "Cost";
sheet["C1"].Value = "Margin";

// Write data
sheet["A2"].Value = 50000;
sheet["B2"].Value = 32000;

// Write a calculated formula
sheet["C2"].Formula = "=A2-B2";

// Apply bold formatting to the header row
sheet["A1:C1"].Style.Font.Bold = true;

// Highlight the margin cell
sheet["C2"].Style.BackgroundColor = "#D4EDDA";
sheet["C2"].Style.Font.Bold = true;

workBook.SaveAs("analytics.xlsx");
using IronXL;
using IronXl.Styles;

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.CreateWorkSheet("Analytics");

// Write labels
sheet["A1"].Value = "Revenue";
sheet["B1"].Value = "Cost";
sheet["C1"].Value = "Margin";

// Write data
sheet["A2"].Value = 50000;
sheet["B2"].Value = 32000;

// Write a calculated formula
sheet["C2"].Formula = "=A2-B2";

// Apply bold formatting to the header row
sheet["A1:C1"].Style.Font.Bold = true;

// Highlight the margin cell
sheet["C2"].Style.BackgroundColor = "#D4EDDA";
sheet["C2"].Style.Font.Bold = true;

workBook.SaveAs("analytics.xlsx");
Imports IronXL
Imports IronXl.Styles

Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim sheet As WorkSheet = workBook.CreateWorkSheet("Analytics")

' Write labels
sheet("A1").Value = "Revenue"
sheet("B1").Value = "Cost"
sheet("C1").Value = "Margin"

' Write data
sheet("A2").Value = 50000
sheet("B2").Value = 32000

' Write a calculated formula
sheet("C2").Formula = "=A2-B2"

' Apply bold formatting to the header row
sheet("A1:C1").Style.Font.Bold = True

' Highlight the margin cell
sheet("C2").Style.BackgroundColor = "#D4EDDA"
sheet("C2").Style.Font.Bold = True

workBook.SaveAs("analytics.xlsx")
$vbLabelText   $csharpLabel

数式サポートに関するドキュメントでは、算術関数、論理関数、日時関数、文字列関数、統計関数について説明しています。 セル書式設定ガイドでは、数値形式、日付形式、およびカスタム書式文字列について説明しています。

CSVデータをExcelにエクスポートするにはどうすればよいですか?

IronXLはCSVファイルを直接XLSXに変換できるため、ヘッダーの追加、書式設定の適用、そして下流の利用者が期待する構造化された形式での保存が可能になります。

using IronXL;

// Load a CSV file as if it were a workbook
WorkBook csvWorkBook = WorkBook.LoadCSV("data.csv", fileFormat: ExcelFileFormat.CSV);
WorkSheet csvSheet = csvWorkBook.DefaultWorkSheet;

// Apply a bold header style to the first row
csvSheet["A1:Z1"].Style.Font.Bold = true;

// Save as XLSX
csvWorkBook.SaveAs("converted.xlsx");
Console.WriteLine("CSV converted to XLSX.");
using IronXL;

// Load a CSV file as if it were a workbook
WorkBook csvWorkBook = WorkBook.LoadCSV("data.csv", fileFormat: ExcelFileFormat.CSV);
WorkSheet csvSheet = csvWorkBook.DefaultWorkSheet;

// Apply a bold header style to the first row
csvSheet["A1:Z1"].Style.Font.Bold = true;

// Save as XLSX
csvWorkBook.SaveAs("converted.xlsx");
Console.WriteLine("CSV converted to XLSX.");
Imports IronXL

' Load a CSV file as if it were a workbook
Dim csvWorkBook As WorkBook = WorkBook.LoadCSV("data.csv", fileFormat:=ExcelFileFormat.CSV)
Dim csvSheet As WorkSheet = csvWorkBook.DefaultWorkSheet

' Apply a bold header style to the first row
csvSheet("A1:Z1").Style.Font.Bold = True

' Save as XLSX
csvWorkBook.SaveAs("converted.xlsx")
Console.WriteLine("CSV converted to XLSX.")
$vbLabelText   $csharpLabel

この単一のワークフローにより、従来は読み込みにExcelDataReader 、出力に別途書き込みライブラリが必要だった複数のライブラリからなるパイプラインが不要になります。

ExcelDataReaderとIronXLを並べて比較するにはどうすれば良いですか?

以下の表は、最も一般的なExcel開発シナリオにおける、2つのライブラリの機能の違いをまとめたものです。

機能比較:ExcelDataReader vs IronXL
能力 ExcelDataReader IronXL
XLSX / XLS ファイルを読み込む はい はい
CSVファイルを読み込む はい はい
XLSXファイルの作成/書き込み なし はい
数式を書く なし はい
セルスタイルを適用する なし はい
条件付き書式設定 なし はい
グラフを作成する なし はい
CSV/TSV形式でエクスポート なし はい
オフィスへの依存 該当なし 該当なし
.NET 10互換 はい はい

ExcelDataReaderは、読み取りのみが要件であり、バイナリサイズが重要な場合には、依然として有効な選択肢です。 出力を伴うあらゆるシナリオにおいて、 IronXLは最適なツールです。

IronXLはいつ使用すべきですか?

IronXLは、アプリケーションでExcelファイルを作成または変更する必要がある場合に最適な選択肢となります。 以下のシナリオは、ExcelDataReaderでは対応できない実際のビジネス要件を表しています。

-レポート生成:データベースクエリ、APIレスポンス、またはメモリ内計算からExcelレポートを生成します。 詳しい手順については、 Excelレポート作成ガイドを参照してください。 -データエクスポート:アプリケーションデータ(コレクション、データテーブル、データセットなど)をXLSX形式に変換し、ダウンロードまたはアーカイブします。 DataTableからExcelへの変換チュートリアルでは、正確なAPIが示されています。 -テンプレート処理:プレースホルダーセルを含むXLSXテンプレートを読み込み、動的にセルにデータを入力し、入力済みの結果を保存します。 -バッチファイル変更:ワークブックのディレクトリを順に処理し、プログラムで変更を適用して、各ファイルを保存します。IronXLは、複数の開いているワークブックを個別に処理します。 -請求書および財務文書の作成:数式、数値書式設定、セル結合、スタイル付きヘッダーを使用して、構造化された文書を作成します。

  • CSVからXLSXへの変換:カンマ区切りのアップロードを受け付け、構造化されたワークブックとして再フォーマットし、XLSX形式でダウンロードできるようにユーザーに返します。

従来、読み取りライブラリと書き込みライブラリの両方が必要だった、あるいはCOMを介したExcel自動化に依存していたビジネスアプリケーションは、 IronXLのみに統合することが可能になります。

高度な出力シナリオについては、条件付き書式設定に関するドキュメントグラフ作成ガイドに、書式設定と視覚化機能の全範囲が記載されています。 ライセンスページには本番環境への導入オプションが記載されており、完全なAPIリファレンスにはすべてのクラスとメソッドが文書化されています。

無料トライアルを始めるにはどうすればいいですか?

IronXLは、無料の開発ライセンスで利用可能です。 NuGetパッケージをインストールし、上記の例を自分のファイルに対して実行して、出力が要件を満たしていることを確認してから、製品版ライセンスを契約してください。

IronXLの入門ガイドでは、インストール方法、初回使用時のパターン、実行可能なコードを用いた一般的なシナリオについて解説しています。 チュートリアルセクションでは、読み取りワークフローについて詳しく解説しています。これは、アプリケーションで読み取り操作と書き込み操作の両方が必要な場合に役立ちます。

無料トライアルを開始すると、エクスポート形式、高度な書式設定、数式評価、複数シートのワークブック管理など、すべての機能をご利用いただけます。 大規模な環境でライブラリを評価するチーム向けに、 IronSuiteバンドルにはIronXLに加え、 IronPDF、 IronOCR、その他の生産性向上ライブラリがセットになっており、お得な価格で提供されています。

ExcelDataReaderは今でも使う価値があるのか​​?

ExcelDataReaderは、明確な目的を持った、適切にメンテナンスされているオープンソースライブラリです。 アプリケーションがExcelファイルを読み込むだけで書き込みを行わない場合(例えば、XLSXファイルをデータベースにインポートするデータ取り込みパイプラインなど)、ExcelDataReaderは合理的で軽量な選択肢となります。そのストリーミングモデルは、非常に大きなファイルでもメモリ効率に優れています。

問題は、要求が拡大したときに発生する。 読み取り専用のインポートツールとして始まったアプリケーションは、確認エクスポート、エラーレポート、または元のファイルの修正コピーを生成するように進化することがよくあります。 その時点で、ExcelDataReaderのスコープ境界が障害となり、プロジェクトの途中で読み書き可能なライブラリに移行することは、最初から読み書き可能なライブラリを使用するよりも混乱を招くことになる。

最初からIronXLを選択すれば、どちらのシナリオにも対応できます。 IronXLの読み取りチュートリアルでは、 IronXLを使った読み取りも同様に簡単であることを示しています。セル参照、範囲の反復処理、DataSetのエクスポート、型安全な値へのアクセスはすべて、使い慣れた同じAPIを通じて行われます。

次に何をすべきでしょうか?

ExcelDataReaderは読み取り専用ライブラリです。 その制約は意図的なものであり、変更されることはありません。 プロジェクトでExcelファイルの作成、変更、エクスポート(形式を問わず)が必要な場合は、双方向のExcelアクセスに対応したライブラリが必要です。

IronXLは、Officeへの依存、COM相互運用性の複雑さ、複数のパッケージを脆弱なマルチライブラリスタックに組み合わせることなしに、その機能を提供します。 NuGetからインストールし、既存の読み取りコードをIronXLの同等のメソッドに置き換え、必要に応じて書き込み操作を追加してください。APIは双方向で一貫しています。

IronXLのドキュメントを参照して、ライブラリの全容を理解してください。 Excelファイルの作成スプレッドシートの作成既存のワークブックの読み込みなど、特定の作業に関する手順ガイドを確認してください。 制作ライセンスの評価準備が整ったら、価格とライセンスのページに利用可能なすべてのティアが表示されます。

よくある質問

ExcelDataReaderはExcelファイルを書き込めますか?

いいえ、ExcelDataReaderはExcelファイルを書き込むことはできません。ExcelDataReaderは、Excelデータの読み込み専用に設計されています。

ExcelDataReaderを使用することの制限は何ですか?

ExcelDataReaderの重要な制限は、その名前がExcelの完全な機能を示唆しているにもかかわらず、Excelファイルに書き込めないことです。

ExcelDataReaderの書き込み制限を克服するにはどうすればいいですか?

C#でExcelファイルの読み書きができるIronXLを使用することで、この制限を克服することができます。

IronXLはExcelDataReaderにはない何を提供していますか?

IronXLはExcelDataReaderに欠けている読み込みと書き込みを含む包括的なExcelファイル操作機能を提供します。

IronXLはC#でExcelファイルを扱うための良い選択肢ですか?

IronXLは、C#でExcelファイルを読み書きするための完全な機能を提供するので、素晴らしい選択肢です。

なぜ開発者はExcelDataReaderではなくIronXLを選ぶのでしょうか?

開発者はExcelDataReaderよりもIronXLを選ぶかもしれませんが、それはExcelドキュメントの読み込みと書き込みの両方をシームレスに処理できるためです。

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

IronXLはExcelファイルを読み書きする完全な機能を提供し、ExcelDataReaderよりも多用途で包括的なソリューションです。

IronXLはExcelファイルの作成をどのように処理しますか?

IronXLはExcelファイルを記述する簡単な方法を提供し、開発者にとってシームレスで効率的なプロセスを実現します。

IronXLはExcelファイルの読み込みと書き込みの両方に対応していますか?

IronXLはC#でExcelファイルの読み書きを効率的に処理するように設計されています。

ExcelDataReaderを使用する前に知っておくべきことは何ですか?

ExcelDataReaderを使用する前に、Excelファイルの読み込みのみをサポートし、書き込み機能はないことに注意してください。

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

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

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

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね