Чтобы извлечь конкретный столбец из существующего Excel, который имеет значение точности 2 (3,55).Помогите мне сделать, он имеет 1 значение точности (3.5,3.9) - PullRequest
0 голосов
/ 02 марта 2011

Я хочу извлечь конкретный столбец из существующего Excel, который имеет значение точности с плавающей запятой (3.55,3.98). Пожалуйста, помогите мне сделать так, чтобы оно имело 1 значение точности (3,5,3,9).

try {
    InputStream myxls = new FileInputStream("D:\\Amrutha\\SIMPL\\DashBoardReport20110228.xls");
    HSSFWorkbook wb = new HSSFWorkbook(myxls);
    HSSFSheet sheet = wb.getSheetAt(0);                  

    HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet,wb);
    CellReference cellReferenceSource = new CellReference("AA17");
    HSSFFormulaEvaluator.evaluateAllFormulaCells(wb);

    for(Iterator rowIter = sheet.rowIterator(); rowIter.hasNext(); ) {
       HSSFRow  row = (HSSFRow) rowIter.next();
       HSSFCell cellSource = row.getCell(cellReferenceSource.getCol());

       evaluator.setCurrentRow(row);
       if (cellSource != null) {
           //HSSFFormulaEvaluator.CellValue cellValue = evaluator.evaluate(cell);
           CellValue cellValue= evaluator.evaluate(cellSource);
           //CellValue cellValueTarget= evaluator.evaluate(cellTarget);
           FileOutputStream fout = new FileOutputStream("D:\\Amrutha\\SIMPL\\DashBoardReport20110228.xls");

           if(cellValue != null) {

              switch (cellValue.getCellType()) {

              case HSSFCell.CELL_TYPE_BOOLEAN:
                  System.out.println(cellValue.getBooleanValue());                      
                  break;
              case HSSFCell.CELL_TYPE_NUMERIC:
                  // HSSFCellStyle style = wb.createCellStyle();
                  HSSFDataFormat format = wb.createDataFormat();
                  HSSFCellStyle style = wb.createCellStyle();
                  style.setDataFormat(format.getFormat("0.0"));
                  // cellSource.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                  cellSource.setCellStyle(style);
                  System.out.println( cellSource.getCellStyle());
                  // style.setDataFormat(format.getFormat(".0"));
                  System.out.println(cellValue.getNumberValue());
                  cellSource.setCellValue(cellValue.getNumberValue()); 
                  // cellSource.setCellStyle(style);
                  // cellSource.setCellValue(cellValue.getNumberValue()); 
                  // System.out.println(cellValue.getNumberValue()); 
                  wb.write(fout);
                  fout.close();
                  break;
              case HSSFCell.CELL_TYPE_STRING:
                  System.out.println(cellValue.getStringValue());                      
                  break;
              case HSSFCell.CELL_TYPE_ERROR:
                  System.out.println(cellValue.getErrorValue());                      
                  break;
              case HSSFCell.CELL_TYPE_BLANK:
                  System.out.println("");                      
                  break;                  
                  // CELL_TYPE_FORMULA will never happen
              case HSSFCell.CELL_TYPE_FORMULA:
                  System.out.println("CELL_TYPE_FORMULA");
                  break;
              default:
                  System.out.println("null");
                  break;
              }
           }
        } 
        else {
            System.out.println("null");
        }
     }
  } 
  catch(Exception e) {
      System.out.print("Exception in main "+e);
  }
}

1 Ответ

2 голосов
/ 03 марта 2011

Вы можете сделать это в простой Java, а не в poi.

Cell.getNumericCellValue вернет вам Double, так что просто отформатируйте его с нужной вам точностью.

        Double d = new Double(cellSource.getNumericCellValue());
        System.out.println ("Double value "+ d);

        DecimalFormat df = new DecimalFormat("###.#");
        System.out.println(df.format(d));

или даже проще

DecimalFormat df = new DecimalFormat("###.#");
                System.out.println(df.format(cellSource.getNumericCellValue()));

Вывод из моего испытания

Double value 1.808702175543886
1.8
...