Help us understand the problem. What is going on with this article?

CsvHelperを使ってCSV出力してみた

More than 1 year has passed since last update.

C#でCSV出力する処理を書こうと思ったのだが、
ちまちま書くのがなんかダサいなと思って探してみたのがCsvHelperというモジュール。

参考

https://webbibouroku.com/Blog/Article/csvhelper-write

http://blog.okazuki.jp/entry/2014/12/26/121954

使い方

基本的には上記サイトのようにNugetでインストールし、マッパーを作成すればいいのだが

参考サイトと違った点が一つ。

Mapperの継承元としてCsvClassMapとあるが、どうもこれが変わったっぽい。

ClassMapになってた。

なのでこんな感じになる。

データ格納用のクラス

public class Person
{
    public string Name { get; set; }
    public string Kana { get; set; }
    public DateTime BirthDate { get; set; }
}

CSV用のマッパークラス

public class PersonMapper : CsvHelper.Configuration.ClassMap<Person>
{
    public PersonMapper()
    {
        Map(x => x.Name).Index(0).Name("氏名");
        Map(x => x.BirthDate).Index(1).Name("生年月日").TypeConverterOption("yyyy/MM/dd");
        Map(x => x.Kana).Ignore();
}

どうやらバージョンアップで書き方が少し変わったみたいです。

Map(x => x.BirthDate).Index(1).Name("生年月日").TypeConverterOption("yyyy/MM/dd");

Map(x => x.BirthDate).Index(1).Name("生年月日").TypeConverterOption.Format("yyyy/MM/dd");

出力処理

using (var sw = new StreamWriter(filePath, true, Encoding.GetEncoding("SHIFT_JIS")))
using (var csv = new CsvHelper.CsvWriter(sw))
{
    // ヘッダーあり
    csv.Configuration.HasHeaderRecord = true;
    // マッパーを登録
    csv.Configuration.RegisterClassMap<PersonMapper>();
    // データを読み出し
    csv.WriteRecords(Personのリスト);
}

リストをまとめて出力できるのは便利ですな。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away