Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CsvColumnのname属性をデータ項目名でCSV出力するには #29

Closed
tacchang001 opened this issue Jul 5, 2014 · 6 comments
Closed

Comments

@tacchang001
Copy link

以下のようなCsvEntityを作成してCSVに出力したところ、カラム名がJavaのメンバ変数名になりました。例えば"CODE"ではなく、"cod"です。

CSVの1行目に出力するカラム名は、name属性で書き出す方法はありますか?

(省略)
@CsvEntity
public class Travel {
    @CsvColumn(name = "CODE")
    public String cod;

    @CsvColumn(name = "DATE", format = "yyyy/MM/dd")
    public Date date;
(省略)
@orangesignal
Copy link
Owner

カラム名で出力されるべきなのでヘッダー行生成部分の不具合っぽい気がしています。
確認します。

@orangesignal
Copy link
Owner

お問い合わせの件ですが、以下のようなコードで検証したところ再現致しませんでした。
お手数なのですが、使用しているバージョンの情報や再現コードの提供などは可能でしょうか?

    @Test
    public void testIssue29() throws Exception {
        final StringWriter sw = new StringWriter();
        final CsvEntityWriter<Travel> writer = CsvEntityWriter.newInstance(
                new CsvWriter(sw, cfg),
                Travel.class
            );
        try {
            final DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
            df.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));

            writer.write(new Travel("aaa", df.parse("2008/10/28")));
            writer.write(new Travel("bbb", null));
            writer.write(new Travel("ccc", df.parse("2008/10/26")));
        } finally {
            writer.close();
        }
        assertThat(sw.getBuffer().toString(), is("CODE,DATE\r\naaa,2008/10/28\r\nbbb,NULL\r\nccc,2008/10/26\r\n"));
    }

@tacchang001
Copy link
Author

わざわざ調査ありがとうございました。
私の手元のコードを載せておきます。
この後、ご提示いただいたコードを私の方でも実行してみます。


@CsvEntity
public class Travel {
@CsvColumn(name = "コード")
public String code;
@CsvColumn(name = "日付", format = "yyyy/MM/dd")
public Date DA_TE;
@CsvColumn(name = "距離")
public Integer distance;
@CsvColumn(name = "名前")
public String name;
public Travel(String code, Date date, Integer distance, String name) {
this.code = code;
this.DA_TE = date;
this.distance = distance;
this.name = name;
}
}


Travel t1 = new Travel("AAA111", new Date(2014-1900 ,7-1, 7), 1000, "旅①");
Travel t2 = new Travel("BBB222", new Date(2014-1900 ,9-1, 10), 1000, "旅②");
Travel t3 = new Travel("AAA111", new Date(2014-1900 ,7-1, 7), 1000, "旅③");
List list = new ArrayList(Arrays.asList(t1, t2, t3));
CsvConfig cfg = new CsvConfig(',', '"', '"');
cfg.setLineSeparator("\n");
Csv.save(list, new File("travel.csv"), cfg, new BeanListHandler(Travel.class));


  <dependencies>
    <dependency>
        <groupId>com.orangesignal</groupId>
        <artifactId>orangesignal-csv</artifactId>
        <version>2.2.0</version>
    </dependency>
  </dependencies>

結果
"code","DA_TE","distance","name"
"AAA111","2014-07-07","1000","旅①"
"BBB222","2014-09-10","1000","旅②"
"AAA111","2014-07-07","1000","旅③"

@tacchang001
Copy link
Author

ご提示いただいた方法を試してみたところ、うまくいきました。
目的達成です。
お騒がせしました。

@orangesignal
Copy link
Owner

目的達成とのことで嬉しいです♪

折角なので、ご提供頂いたコード拝見しました。
CsvEntity を使用しているとのことでしたが、BeanListHandler が使用されておりました。
このハンドラですと Travel クラスのフィールド名を強制的に使用してしまいますので、CsvEntityListHandler にご変更頂くことで期待動作になるかと思われます。

今回のナレッジを受けて、ハンドラの選択についてわかりやすくなるようにドキュメントなどを改善したいと思います。
どうぞ宜しくお願い致します。

@ttson24
Copy link

ttson24 commented Nov 26, 2015

i have to file csv(i call them template).
i have to entity:

@CsvColumn(
            position = 4,
            name = "TEST_PLAN_NAME",
            language = "ja",
            country = "JP")
    private String testPlanName;

when write csv file:

List<String[]> listHeader =
                    Csv.load(fileTemplate, EncodingType.SHIFT_JIS.getCode(), config, new StringArrayListHandler());

but i open this file csv as excel, font error below: 蜊倅ス薙ユ繧ケ繝・it must is 単体テスト
what is suit i do?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants