Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
18
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

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
18
Help us understand the problem. What are the problem?