3

BeanデータをCSVにエクスポートするためにsuperCSVを使用しています。特殊文字のセルだけでなく、すべてのセルを二重引用符で囲んでください。

現在、CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCEを使用すると、特殊文字を含むセルでさえ引用符で囲まれません。(EXCEL_PREFERENCEを使用すると、「。」を含むアドレスが引用符で囲まれます。)

私の目標は、MS Office(ハンガリー語)が使用できる方法で住所、電話番号、すべてをエクスポートすることです。つまり、+36000000000から36000000000などの電話番号を変換しません。

4

1 に答える 1

3

編集:スーパーCSV2.1.0の更新

Super CSV 2.1.0以降、QuoteMode通常は必要ない場合に見積もりを有効にするために、設定を介してを指定できるようになりました。すべての列を引用するには、組み込みのを使用できますAlwaysQuoteMode。特定の列の引用符を有効にする場合は、を使用しColumnQuoteModeます。この方法で引用を無効にすることはできないことに注意してください。無効にするには、独自CsvEncoderに引用を指定する必要があります。


そのフォーラムの投稿を私の注意を引いてくれてありがとう!Kasperはその機能の実装に取り​​掛かっていなかったようです。次のリリースで何ができるか見ていきます:)

スーパーCSVソースをハッキングしてこの「すべてを引用」機能を追加する代わりに、独自のプロジェクトでスーパーCSV実装を拡張できます。前述のように、Super CSVは、特殊文字(引用符、カンマなど)が含まれている場合にのみフィールド全体を引用します。また、フィールドに先頭/末尾のスペースが含まれている場合も引用します。

Writerこれを念頭に置いて、メソッドをオーバーライドする独自の記述ができない理由はありませんescapeString()(まだ引用されていないことを確認する必要があります)。

package org.supercsv.io;

import java.io.Writer;

import org.supercsv.prefs.CsvPreference;

public class QuoteAllCsvBeanWriter extends CsvBeanWriter {

    public QuoteAllCsvBeanWriter(Writer writer, CsvPreference preference) {
        super(writer, preference);
    }

    @Override
    protected String escapeString(String csvElement) {

        // perform normal escaping
        final String escaped = super.escapeString(csvElement);

        // add surrounding quotes if required
        final String quote = String.valueOf((char) preference.getQuoteChar());
        if (escaped.startsWith(quote) && escaped.endsWith(quote)){
            return escaped;
        } else {
            return quote + escaped + quote;
        }
    }

}
于 2012-04-17T10:32:07.663 に答える