当我尝试使用格式获取单元格的值时,我得到的结果不带零。

单元格值:7654

单元格格式值:0“ 0 /10с”

单元格显示值:7654 0 /10с

DataFormatter formatter = new DataFormatter();
String orderNumber = formatter.formatCellValue(cell);
System.out.println(orderNumber);


结果:7654 /1с

截图:Cell format value

最佳答案

apache poi数字格式DataFormatter转换为Excel时,这是0" 0/10с"java.text.Format中的错误。正确的对应java.text.Format将是new java.text.DecimalFormat("0' 0/10с'")。但是apache poiDataFormatter无法正确翻译此内容。

您应该为此向apache poi提交错误报告。但是在错误报告中,您不应给出Excel数字格式0" 0/10с"作为示例,因为它包含西里尔字母с,因此可能导致对Unicode问题的错误假设。使用0数字格式Excel会发生相同的问题(当它们包含在带引号的文本部分中时,会删除0" 0abc0")。

作为一种解决方法,可以告诉DataFormatter如何转换单个特殊的Excel数字格式。为此,使用方法DataFormatter.addFormat

例:

import org.apache.poi.ss.usermodel.*;

import java.io.FileInputStream;

class DataFormatterAddFormat {

 public static void main(String[] args) throws Exception {

  Workbook workbook = WorkbookFactory.create(new FileInputStream("ExcelExample.xlsx"));

  DataFormatter dataFormatter = new DataFormatter();
  FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();

  dataFormatter.addFormat("0\" 0/10\u0441\"", new java.text.DecimalFormat("0' 0/10\u0441'"));
  dataFormatter.addFormat("0\" 0/10c\"", new java.text.DecimalFormat("0' 0/10c'"));
  dataFormatter.addFormat("0\" 0abc0\"", new java.text.DecimalFormat("0' 0abc0'"));

  Sheet sheet = workbook.getSheetAt(0);
  for (Row row : sheet) {
   for (Cell cell : row) {

     String value = dataFormatter.formatCellValue(cell, formulaEvaluator);
     System.out.println(value);

   }
  }
  workbook.close();
 }
}


现在,可以正确翻译添加的特殊数字格式。当然,这并不是最终的解决方案。这就是为什么要向apache poi提交错误报告的提示。

08-25 21:33