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

标签 java csv export-to-csv quote supercsv

我正在使用 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/

相关文章:

java - 问题启动 Cassandra。 Java 运行时环境 : 检测到 fatal error

python - 给定列标题和行值时的单元格值

python - 如何从 CSV 文件中获取每列而不是行的平均值?

scala - 如何从 Scala Spark DataFrameReader csv 记录格式错误的行

asp.net-web-api - 无法从 Web API 下载 csv 文件

java - 初始化一个对象

java - Intellij IDEA : Spark code running results in java. lang.VerifyError

mysql - 按列分组查询,然后将多行导出为单行

java - java的stb_loadimage()和raster.getPixels()对于同一个文件的区别

python - 在python中将数据写入csv文件