错误的值/数字存储为文本-Apache POI

时间:2018-10-31 18:38:58

标签: java arrays excel apache-poi output

我正在开发一个应用程序,该应用程序从excel文件中获取数据并经过几次操作就输出了一个excel。 我有2个问题,第一个是:

在我的主要excel文件中,我有这个值170299024773,在Excel中看起来像1.703E+11,然后在输出文件中我得到了1.70299E+11,确切的值是{{ 1}}。 如您所见,它不是主文件的值。 此外,对于该单元格,我遇到错误“数字存储为文本”,然后从Excel中修复了此错误,得到了170299000000

我看到关于Nember的一些技巧存储了一个文本,尤其是存储了DataFormatter,但就我而言并没有改变

我用来获取excel工作表数据的代码:

1.70E+11

在此先感谢大家……

编辑:我修正了错误的添加值

private static String[][] sheetToArray(org.apache.poi.ss.usermodel.Sheet sheet, int nbCol){
    String[][] tmp = new String[sheet.getLastRowNum()+1][nbCol];

        for (int i = 0; i < sheet.getLastRowNum()+1; i++) { //Config1 to array
            Row row = sheet.getRow(i);
            DataFormatter df = new DataFormatter();
                for (int j = 0; j < nbCol; j++) {
                    Cell cellC1 = row.getCell(j);
                     tmp[i][j] = df.formatCellValue(cellC1);
                }
            }
        return tmp;
    }

但是,现在,我在数字状态中添加了一些十进制值...要解决该问题,我应该使用DataFormatter,但在这种情况下,我将丢失正确的数据

1 个答案:

答案 0 :(得分:1)

使用DataFormatter时,无需确定单元格类型。 DataFormatter将始终以String的形式以及Excel单元格中显示的值获取值(并非在所有情况下都如编辑栏中所示)。因此,如果单元格显示1,70299E+11,则DataFormatter也将得到“ 1,70299E + 11”。如果这不是想要的值,那么必须DataFormatter被告知要做什么,而不是像Excel那样解释单元格格式。

例如,如果使用单元格格式170299024773,则1,70299E+11单元中的值excel将显示为General。如果不需要,则必须在Excel中更改单元格格式。例如,使用数字格式0意味着:只要有可能,就显示整数值。否则,必须告知DataFormatter它将解释不同于General的单元格格式Excel

下面显示了如何告诉DataFormatterGeneral的单元格格式解释为#.###############

Excel:

enter image description here

代码:

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

import java.io.FileInputStream;

class ExcelDataformatterLikeCalcExample {

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

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

  DataFormatter df = new DataFormatter();

  df.addFormat("General", new java.text.DecimalFormat("#.###############"));

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

     String value = df.formatCellValue(cell);
     System.out.println(value);

   }
  }
  wb.close();

 }

}

结果:

axel@arichter:~/Dokumente/JAVA/poi/poi-4.0.0$ java -cp .:./*:./lib/*:./ooxml-lib/* ExcelDataformatterLikeCalcExample 
170299024773