gpt4 book ai didi

java - SuperCSV 引用每个导出的单元格

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:20 25 4
gpt4 key购买 nike

我正在使用 superCSV 将 bean 数据导出到 CSV。我希望每个单元格都用双引号引起来,而不仅仅是那些带有特殊字符的单元格。

现在,使用 CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE,即使是具有特殊字符的单元格也不会被引用。 (使用 EXCEL_PREFERENCE 设置包含“.”的地址被引用。)

我的目标是以 MS Office(匈牙利语)可以使用的方式导出地址、电话号码以及所有内容,即不会将 +36000000000 之类的电话号码转换为 36000000000。

最佳答案

编辑: Super CSV 2.1.0 更新

从 Super CSV 2.1.0 开始,您现在可以通过首选项指定 QuoteMode,以便在通常不需要时启用引号。要引用每一列,您可以使用内置的 AlwaysQuoteMode。如果要为特定列启用引号,请使用 ColumnQuoteMode。请注意,您不能以这种方式禁用引用,您必须提供自己的 CsvEncoder 才能做到这一点。


感谢您带来 forum post引起我的注意!看起来 Kasper 并没有抽出时间来实现该功能。我会看看我能为即将发布的版本做些什么:)

您可以在自己的项目中扩展 Super CSV 实现,而不是修改 Super 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;
}
}

}

关于java - SuperCSV 引用每个导出的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10177293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com