0

我想知道是否有办法在使用 SuperCsv 时保持领先的 0。

我的问题是我有几列的数字前导为 0。我想保留 0,但 excel 不断剥离它,我还尝试在数字的开头附加一些字符,例如“=”但是没有好的结果。

Excel 显示我在数字开头添加的第一个字符,因此列值看起来像 =0222333111 ,那是因为 supercsv 可能将输出包装在引号之间。

我在 superCsv 网站上没有找到任何东西,而且我想我不是唯一一个遇到这个问题的人。我应该迁移到 Excel Java 库,还是有解决方法?

4

2 回答 2

0

CSV 文件格式不允许您指定外部程序如何处理单元格。即使前导零被写入 CSV 文件(请检查,如果您还没有这样做),Excel 可能会认为它比您更聪明,前导零是偶然出现的并丢弃它们。

即使有一些变通办法,比如添加各种不可见的 Unicode 字符,这只是一个 hack,不能保证与其他版本的 Excel 一起工作。

因此,CSV 似乎不足以满足您的要求。要么切换到不同的文件格式,要么将 Excel 配置为将所有单元格视为字符串而不是数字(我不知道后者如何或是否可能)。

于 2013-07-11T08:14:59.193 回答
0

在 supercsv 中,您可以使用下面的自定义单元处理器,它将在您的单元格值中附加 =

public class PreserveLeadingZeroes extends CellProcessorAdaptor {

    private static final Logger LOG = LoggerFactory.getLogger(PreserveLeadingZeroes.class);

    public PreserveLeadingZeroes() {
        super();
    }

    public PreserveLeadingZeroes(CellProcessor next) {
        super(next);
    }

    public Object execute(Object value, CsvContext context) {

        if (value == null) {
            // LOG.debug("null customer code");
            final String result = "";
            return next.execute(result, context);
        }
        // LOG.debug("parse customer code : " + value.toString());
        final String result = "=\"" + value.toString() + "\"";
        return next.execute(result, context);
    }
} 
于 2019-08-06T03:06:49.547 回答