はじめに
C#を使ってクラスのデータをCSVファイルに出力する方法を紹介します。
データはクラスに保管することも多いと思います。クラスデータをそのままCSVに出力できれば汎用的で、活用の幅が広がると思います。
今回は、CsvHeaderプロパティがあれば、CSVのヘッダーとしてそのプロパティ値を使用する方法を示します。以下のサンプルプログラムを実行することで、クラスデータをCSVファイルに出力する機能を取得できます。
サンプルプログラム
以下に、C#でクラスデータをCSVファイルに出力するサンプルプログラムを示します。
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Reflection;
class Program
{
static void Main()
{
// データの準備
List<Person> people = new List<Person>
{
new Person { Id = 1, Name = "山田 太郎", Age = 25 },
new Person { Id = 2, Name = "鈴木 次郎", Age = 30 },
new Person { Id = 3, Name = "佐藤 三郎", Age = 22 }
};
// CSVファイルに出力
WriteCSV("output.csv", people);
Console.WriteLine("CSVファイルを出力しました。");
}
static void WriteCSV<T>(string fileName, List<T> data)
{
using (StreamWriter sw = new StreamWriter(fileName, false, Encoding.UTF8))
{
Type type = typeof(T);
PropertyInfo[] properties = type.GetProperties();
// ヘッダーを書き込む
List<string> headers = new List<string>();
foreach (PropertyInfo property in properties)
{
CsvHeaderAttribute headerAttribute = property.GetCustomAttribute<CsvHeaderAttribute>();
headers.Add(headerAttribute != null ? headerAttribute.HeaderName : property.Name);
}
sw.WriteLine(string.Join(",", headers));
// データを書き込む
foreach (T item in data)
{
List<string> rowData = new List<string>();
foreach (PropertyInfo property in properties)
{
rowData.Add(property.GetValue(item).ToString());
}
sw.WriteLine(string.Join(",", rowData));
}
}
}
}
class Person
{
[CsvHeader("ID")]
public int Id { get; set; }
[CsvHeader("氏名")]
public string Name { get; set; }
[CsvHeader("年齢")]
public int Age { get; set; }
}
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
class CsvHeaderAttribute : Attribute
{
public string HeaderName { get; set; }
public CsvHeaderAttribute(string headerName)
{
HeaderName = headerName;
}
}
このサンプルプログラムでは、以下の手順でCSVファイルを出力しています。
- 必要な名前空間をインポートします。
Person
クラスとCsvHeaderAttribute
クラスを定義します。Main
メソッド内で、Person
クラスのインスタンスを作成し、リストに追加します。WriteCSV
メソッドを呼び出し、CSVファイル名とデータリストを渡します。WriteCSV
メソッド内で、StreamWriter
を使ってCSVファイルにデータを書き込みます。ヘッダー部分では、CsvHeaderAttribute
が適用されたプロパティの場合、属性で指定されたヘッダー名を使用します。
このプログラムを実行すると、カレントディレクトリにoutput.csv
という名前のCSVファイルが生成され、指定したデータが書き込まれます。
まとめ
この記事では、C#を使ってクラスデータをCSVファイルに出力する方法を紹介しました。
指定されたCsvHeaderプロパティがあれば、CSVのヘッダーとしてそのプロパティ値を使用する方法を示しました。
サンプルプログラムを参考に、独自のアプリケーションでCSVファイルを出力できるようになります。
さらなる機能追加やカスタマイズが必要な場合は、必要に応じてプログラムを修正してください。
コメント