【问题标题】:Leading zeros not retained while reading ms excel with apache POI使用 apache POI 读取 ms excel 时不保留前导零
【发布时间】:2014-10-23 14:07:01
【问题描述】:

我正在尝试读取 java 中的 .xlsx 文件(使用 Apache POI API),其单元格包含具有前导零的值。例如 0590040100000124

但是在输出中我得到了类似的东西

6247241.0 5.90040100000124E14 0.0 5.90020100000125E14 这是我的代码

public static void main(String[] args) throws FileNotFoundException, IOException  {
    // TODO Auto-generated method stub
    try{
    Workbook workbook = new XSSFWorkbook(new FileInputStream("C://dedup//dedup.xlsx"));
    String sheetName= workbook.getSheetName(0);
    System.out.println("Sheet Name:"+sheetName);
    double cellValues[] = new double[1000];

     for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
            Sheet sheet = workbook.getSheetAt(i);


            int cellIndex=0;

            for (Row row : sheet) {
                for (Cell cell : row) {
                        //if(cell.toString()!=null){
                         cell.setCellType(Cell.CELL_TYPE_NUMERIC);
                        cellValues[cellIndex]=cell.getNumericCellValue();
                        cellIndex++;
                        //}
                    }
            }
            for(int k=0;k<cellValues.length;k++)
                System.out.print(cellValues[k]+" <-> "+"\t");
        }
    }catch(Exception e){
        System.out.println("JKB Exception Message:"+e.getMessage());
    }

【问题讨论】:

  • 将单元格内容读取为字符串,然后使用此字符串创建您的值
  • @jhamon 即使您将值读取为字符串,您也会得到相同的输出
  • 如果将单引号连接到值的开头会发生什么?

标签: java excel apache apache-poi


【解决方案1】:

您的问题是您将值作为双精度值获取(Excel 中的数字除了少数边缘情况外,存储为浮点数)。从 Java 打印的浮点数没有前导零,使用科学格式等

假设您真正想要的是“给我一个看起来像 Excel 为该单元格显示的字符串”,那么您不想打印原始双精度值。相反,您需要使用DataFormatter class,它提供了读取应用于单元格的 Excel 格式规则的方法,然后(尽其所能)用 Java 重新创建这些规则

你的代码应该是:

DataFormatter fmt = new DataFormatter();

String numberAsInExcel = fmt.formatCellValue(cell);

这将根据 Excel 中应用的格式规则对数字进行格式化,因此应该按照您的预期返回它,带有前导零、非科学格式等

【讨论】:

    猜你喜欢
    • 2014-09-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    相关资源
    最近更新 更多