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

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

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

このチュートリアルを終えると、 ExcelDataReader が設計上読み取り専用になっている理由、既存の読み取りロジックをIronXLに移行する方法、ワークブックの作成、セル値の書き込み、数式の適用、データの書式設定、出力ファイルの保存を行う完全な Excel ワークフローを構築する方法など、Microsoft Office に依存せずにすべて実行できることがわかります。

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

ExcelDataReader Excel ファイルの書き込み: できない理由とIronXLによる解決方法: 画像 1 - ExcelDataReader

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

ExcelDataReader は、XLS、XLSX、CSV 形式の読み取りをサポートしており、効率的に読み取り作業を実行します。 このライブラリは、ADO .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
}
$vbLabelText   $csharpLabel

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

これはバグではありません。 それは意図的な範囲の決定です。 ExcelDataReader は 1 つのことをうまく実行し、そこで停止します。 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.");
$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.なしw.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.なしw.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 の書式設定オプションに直接マップされる Fluent オブジェクト モデルが使用されます。

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");
$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.");
$vbLabelText   $csharpLabel

この単一のワークフローは、読み取り用の ExcelDataReader と出力用の別の書き込みライブラリを必要とする複数のライブラリ パイプラインを置き換えます。

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

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

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

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

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

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

-レポート生成:データベース クエリ、API 応答、またはメモリ内計算から Excel レポートを生成します。 構造化されたウォークスルーについては、 Excel レポート作成ガイドを参照してください。 -データのエクスポート:アプリケーション データ (コレクション、DataTables、DataSet) を 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ボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me