
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# コード例と共に詳しく説明します。
方法 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 は、

補足: 正式なドキュメント配信が必要なシナリオでは、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 日間の無料トライアルライセンスを申請できます。






