我想知道是否有办法在使用 SuperCsv 时保持领先的 0。
我的问题是我有几列的数字前导为 0。我想保留 0,但 excel 不断剥离它,我还尝试在数字的开头附加一些字符,例如“=”但是没有好的结果。
Excel 显示我在数字开头添加的第一个字符,因此列值看起来像 =0222333111 ,那是因为 supercsv 可能将输出包装在引号之间。
我在 superCsv 网站上没有找到任何东西,而且我想我不是唯一一个遇到这个问题的人。我应该迁移到 Excel Java 库,还是有解决方法?
我想知道是否有办法在使用 SuperCsv 时保持领先的 0。
我的问题是我有几列的数字前导为 0。我想保留 0,但 excel 不断剥离它,我还尝试在数字的开头附加一些字符,例如“=”但是没有好的结果。
Excel 显示我在数字开头添加的第一个字符,因此列值看起来像 =0222333111 ,那是因为 supercsv 可能将输出包装在引号之间。
我在 superCsv 网站上没有找到任何东西,而且我想我不是唯一一个遇到这个问题的人。我应该迁移到 Excel Java 库,还是有解决方法?
CSV 文件格式不允许您指定外部程序如何处理单元格。即使前导零被写入 CSV 文件(请检查,如果您还没有这样做),Excel 可能会认为它比您更聪明,前导零是偶然出现的并丢弃它们。
即使有一些变通办法,比如添加各种不可见的 Unicode 字符,这只是一个 hack,不能保证与其他版本的 Excel 一起工作。
因此,CSV 似乎不足以满足您的要求。要么切换到不同的文件格式,要么将 Excel 配置为将所有单元格视为字符串而不是数字(我不知道后者如何或是否可能)。
在 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);
}
}