Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用apache POI读取ms excel时不保留前导零_Java_Excel_Apache_Apache Poi - Fatal编程技术网

Java 使用apache POI读取ms excel时不保留前导零

Java 使用apache POI读取ms excel时不保留前导零,java,excel,apache,apache-poi,Java,Excel,Apache,Apache Poi,我正在尝试读取java中的.xlsx文件(使用ApachePOIAPI),该文件的单元格包含前导零的值。e、 g 059004010000124 但在输出中,我得到了这样的结果 6247241.0 5.900401000124E14 0.0 5.9002010000125E14 这是我的密码 public static void main(String[] args) throws FileNotFoundException, IOException { // TODO Auto-ge

我正在尝试读取java中的.xlsx文件(使用ApachePOIAPI),该文件的单元格包含前导零的值。e、 g 059004010000124

但在输出中,我得到了这样的结果

6247241.0 5.900401000124E14 0.0 5.9002010000125E14 这是我的密码

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());
    }
publicstaticvoidmain(字符串[]args)抛出FileNotFoundException、IOException{
//TODO自动生成的方法存根
试一试{
工作簿工作簿=新XSSF工作簿(新文件输入流(“C://dedup//dedup.xlsx”);
String sheetName=workbook.getSheetName(0);
System.out.println(“图纸名称:”+图纸名称);
double CellValue[]=新的double[1000];
对于(int i=0;i对于(int k=0;k,您的问题是将值提取为双精度(Excel中的数字,除少数边缘情况外,存储为浮点数)。从Java打印的浮点数没有前导零,请使用科学格式等

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

您的代码应该是:

DataFormatter fmt = new DataFormatter();

String numberAsInExcel = fmt.formatCellValue(cell);

这将根据Excel中应用的格式规则对数字进行格式设置,因此返回的数字应与您期望的一样,带有前导零、非科学格式等

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