チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル».NET»Spire.XLS for .NET»変換»C# で CSV を XML に変換する方法 - 完全ガイド(コード例付き)
2026-07-23

C# で CSV を XML に変換する方法 - 完全ガイド(コード例付き)

Spire.XLS を使用して C# で CSV を XML に変換する方法

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 出力を網羅し、完全なコード例と共に解説します。

前提条件

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 ファイルとしてエクスポートします。

主要なデータ部分は次のようになります。

C# で 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 ヘッダーにちなんで名付けられ、カスタムビジネス要件に完全に一致します。

C# で CSV をカスタム XML に変換する

補足: 正式なドキュメント配信が必要なシナリオでは、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.LastRowLastColumn までループする代わりに、カスタムの境界を設定するか(例: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 日間の無料トライアルライセンスを申請できます。

Read 60 times