21
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-02-11

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のリスト);
}

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

21
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?