CSV(Comma-Separated Values)と XML(Extensible Markup Language)は、現代のソフトウェア開発における二大データ交換フォーマットです。CSV は表形式データの軽量な保存と転送に優れ、XML はその階層構造と厳密な検証ルールにより、システム間のデータ連携で広く使用されています。CSV から XML への変換は、設定ファイルの生成、データベースレコードのエクスポート、サードパーティ API との統合といったシナリオでよく求められます。 手動による CSV の解析と XML の生成は、エラーが発生しやすく、非効率的で、大規模なデータセットでは保守が困難です。C# 開発者にとって、Spire.XLS for .NET は、CSV から XML への変換のための軽量かつ高性能なソリューションを提供します。 この記事では、Spire.XLS を使用して C# で CSV を XML に変換する 2 つの主要な方法について、基本的な変換とカスタマイズされた XML 出力を網羅し、完全なコード例と共に解説します。 XML 出力形式の 2 つの種類を理解する 方法 1: C# で CSV を Excel XML に変換する 方法 2: C# で CSV をカスタム XML に変換する 実際の CSV データ処理シナリオへの対応 CSV から XML への変換に関するよくある質問 前提条件 NuGet から Spire.XLS をインストールする Spire.XLS をプロジェクトに追加する最も簡単な方法は、NuGet パッケージマネージャーを使用することです。Visual Studio のパッケージマネージャーコンソールで、次のコマンドを実行します。 Install-Package Spire.XLS または、NuGet UI で「Spire.XLS」を検索し、最新バージョンをインストールすることもできます。 サンプル CSV データの準備(テスト用) プロジェクトの出力フォルダに Products.csv ファイルを作成し、以下のサンプル表形式データ(ヘッダーと行を含む)を記述します。 商品ID,商品名,カテゴリ,価格,在庫数,発売日 1,ノートパソコン,電子機器,999.99,50,2023-01-15 2,ワイヤレスマウス,電子機器,25.50,200,2023-02-20 3,コットンTシャツ,衣料品,19.99,150,2022-11-05 4,コーヒーマグ,家庭用品,12.99,300,2022-09-10 5,デスクチェア,家具,150.00,75,2023-03-01 XML 出力形式の 2 つの種類を理解する Spire.XLS for .NET を使用して CSV ファイルを XML に変換する場合、以下の 2 種類の XML 出力形式を作成できます。 1. Excel XML (SpreadsheetML) Microsoft の Open XML 仕様に基づく標準化された XML 形式です。CSV ファイルの元のテーブルレイアウト、セルの書式設定、全体的な構造が保持されます。生成された XML を Excel や他のスプレッドシート互換ツールで開いたり、編集したり、処理したりする必要がある場合に理想的な選択肢です。 2. カスタム XML 構造 ユーザー定義の XML スキーマにより、CSV の列をカスタム要素タグ、ネストされた階層、調整可能な表示ルールに自由にマッピングできます。特定の固定 XML ノード構造を必要とするサードパーティ API、レガシーシステム、ビジネスプラットフォームとの統合に最適です。 どちらのアプローチも、以降のセクションで C# コード例と共に詳しく説明します。 関連記事:C# で CSV を Excel に変換する方法 方法 1: C# で CSV を Excel XML に変換する これは、わずか数行のコードで済む最もシンプルなアプローチです。CSV を Workbook に読み込み、Excel XML (SpreadsheetML) 形式で直接保存します。ターゲットシステムが Excel のネイティブ XML 形式を受け付ける場合に適しています。 CSV から XML への C# コード例: using Spire.Xls; namespace CsvToExcelXmlConverter { class Program { static void Main(string[] args) { // Workbook インスタンスを作成 Workbook workbook = new Workbook(); // 最初のワークシートに CSV を読み込む workbook.LoadFromFile("Products.csv", ",", 1, 1); // Excel SpreadsheetML 形式で保存 workbook.SaveAsXml("output.xml"); // リソースを解放 workbook.Dispose(); } } } 主要メソッド: LoadFromFile() – Spire.XLS が CSV の内容をワークブックの最初のワークシートに自動的に解析します。 SaveAsXml() – 読み込まれた CSV データを Excel XML ファイルとしてエクスポートします。 主要なデータ部分は次のようになります。 CSV ファイルの変換だけでなく、Spire.XLS for .NET は、同じ強力な Workbook.SaveAsXml() メソッドを使用して、Excel(XLS / XLSX)から XML へのシームレスな変換も可能にします。 方法 2: C# で CSV をカスタム XML に変換する ターゲットシステムが特定の XML スキーマを要求する場合、カスタム XML ドキュメントを構築する必要があります。Spire.XLS と組み込みの .NET XmlWriter クラスを併用することで、これを簡単に実現できます。ワークシートの行と列を反復処理し、整形式の XML を効率的に生成するだけです。 カスタム XML コード例: using Spire.Xls; using System.Xml; namespace CSVtoXMLConverter { class program { static void Main(string[] args) { // ワークブックを初期化し、CSV を読み込む Workbook workbook = new Workbook(); workbook.LoadFromFile("Products.csv", ",", 1, 1); Worksheet worksheet = workbook.Worksheets[0]; // カスタム XML 設定を作成(読みやすくするためのインデント) XmlWriterSettings settings = new XmlWriterSettings { Indent = true, IndentChars = "t", OmitXmlDeclaration = false, Encoding = System.Text.Encoding.UTF8 }; // カスタムルートノードとフォーマットで CSV を XML に保存 XmlWriter writer = XmlWriter.Create("Custom_Output.xml", settings); writer.WriteStartDocument(); // カスタムルート要素: <ProductInventory> writer.WriteStartElement("ProductInventory"); // CSV の行をループ(ヘッダー行をスキップ: 2 から開始) for (int row = 2; row <= worksheet.LastRow; row++) { // カスタムデータノード: <Product> writer.WriteStartElement("Product"); // CSV の列をループし、カスタム要素を書き込む for (int col = 1; col <= worksheet.LastColumn; col++) { string header = worksheet.Range[1, col].Text; string value = worksheet.Range[row, col].Text; writer.WriteElementString(header, value); } writer.WriteEndElement(); // <Product> を閉じる } writer.WriteEndElement(); // <ProductInventory> を閉じる writer.WriteEndDocument(); writer.Close(); workbook.Dispose(); } } } コードの動作: CSV ファイルを Workbook に読み込みます。 ワークシートにアクセスし、インポートされたデータを含む最初のワークシートを取得します。 XmlWriter を作成し、インデント、エンコーディング、その他の書式設定オプションを構成します。 XML ドキュメントを作成します。ドキュメントを開始し、カスタムルート要素を書き込み、次に行(ヘッダー行をスキップ)と列をループし、ヘッダーテキストをタグ名として使用して列ごとに要素を書き込みます。 リソースを閉じます。XmlWriter を閉じ、Workbook を破棄します。 出力結果: 生成された XML は、 をルートノード、 をデータノードとして使用し、子ノードは CSV ヘッダーにちなんで名付けられ、カスタムビジネス要件に完全に一致します。 補足: 正式なドキュメント配信が必要なシナリオでは、Spire.XLS for .NET を使用して、XML ファイルを C# で簡単に PDF に変換することもできます。 実際の CSV データ処理シナリオへの対応 現実の CSV ファイルには、標準的でない区切り文字、空の値、冗長な行/列、欠落したヘッダーなどが含まれることがよくあります。以下の解決策がこれらの一般的な問題を解決します。 異なる区切り文字 CSV ファイルでは、タブ (t)、セミコロン (;)、パイプ (|) が使用される場合があります。Spire.XLS は、CSV ファイルを読み込む際にカスタム区切り文字を指定できます。 // タブ区切り workbook.LoadFromFile("data.tsv", "t", 1, 1); // セミコロン区切り(ヨーロッパのロケールで一般的) workbook.LoadFromFile("data.csv", ";", 1, 1); // パイプ区切り workbook.LoadFromFile("data.psv", "|", 1, 1); 行や列をスキップする CSV にメタデータ行や空の列が含まれている場合は、ループの範囲を調整します。 // 行 3 から開始 for (int row = 3; row <= worksheet.LastRow; row++) // 列 3 から開始 for (int col = 3; col <= worksheet.LastColumn; col++) 欠損値や空セルの処理 CSV ファイル内の空のセルは、空の文字列として表示されます。デフォルト値を書き込むか、要素を省略することで処理できます。 // オプション 1: 空の値を "N/A" で埋める string value = worksheet.Range[row, col].Text; if (string.IsNullOrEmpty(value)) value = "N/A"; writer.WriteElementString(header, value); // オプション 2: 空のノードを省略する string value = worksheet.Range[row, col].Text; if (!string.IsNullOrEmpty(value)) writer.WriteElementString(header, value); ヘッダー行が存在しない場合 CSV にヘッダー行がない場合は、カスタム名の配列を渡すか、以下のように汎用的な列名を生成できます。 for (int col = 1; col <= worksheet.LastColumn; col++) { string header = $"Column{col}"; string value = worksheet.Range[row, col].Text; writer.WriteElementString(header, value); } まとめ Spire.XLS for .NET を使用して C# で CSV を XML に変換することで、手動解析が不要になり、コードの複雑さが軽減されます。Excel XML へのシンプルなワンライン変換が必要な場合でも、完全にカスタマイズされた XML 構造が必要な場合でも、このガイドのコード例を使用すれば、CSV から XML への変換を C# アプリケーションにシームレスに統合できます。 .NET 開発における Excel や CSV 関連のタスクの詳細については、オンラインドキュメントをご覧ください。 CSV から XML への変換に関するよくある質問 Q1: 特定のセル範囲(例:A1:C10)のみを変換できますか? はい。worksheet.LastRow と LastColumn までループする代わりに、カスタムの境界を設定するか(例:A1:C10 の場合は行 2~11 をループ)、worksheet.Range を介して直接範囲にアクセスします。 Q2: Spire.XLS を使用するには Microsoft Excel がインストールされている必要がありますか? いいえ、これは独立した .NET コンポーネントであり、Microsoft Excel、Office 相互運用機能、またはその他のサードパーティ製 Office ソフトウェアに依存しません。 Q3: 複数の CSV ファイルを一度にバッチ変換して XML にできますか? はい。フォルダ内のすべての CSV ファイルをループ処理し、それぞれを Spire.XLS で読み込み、チュートリアルと同じロジックを使用して対応する XML ファイルに一括エクスポートできます。 Q4: 生成された XML 要素にカスタム属性や名前空間を追加できますか? もちろん可能です。ノードにカスタム属性を追加するには XmlWriter.WriteAttributeString() を使用し、エンタープライズ標準の XML スキーマ用の XML 名前空間を定義するには、名前空間パラメータを指定して WriteStartElement を使用します。 無料ライセンスの取得 Spire.XLS for .NET のすべての機能を評価制限なしで体験するには、30 日間の無料トライアルライセンスを申請できます。