【问题标题】:Write file with SuperCsv preserving leading zeros while opening in excel使用 SuperCsv 写入文件,在 excel 中打开时保留前导零
【发布时间】:2013-07-11 08:03:32
【问题描述】:

我想知道是否有办法在使用 SuperCsv 时保持前导 0。

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

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

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

【问题讨论】:

    标签: java csv supercsv leading-zero


    【解决方案1】:

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

    即使有一些变通方法,例如添加各种不可见的 Unicode 字符,这也只是一种技巧,不能保证与其他版本的 Excel 一起使用。

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

    【讨论】:

      【解决方案2】:

      在 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);
          }
      } 
      

      【讨论】:

        猜你喜欢
        • 2014-02-14
        • 2011-02-22
        • 2018-09-13
        • 2012-11-28
        • 1970-01-01
        • 1970-01-01
        • 2014-09-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多