我正在开发一个应用程序,该应用程序从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,但在这种情况下,我将丢失正确的数据
答案 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
。
下面显示了如何告诉DataFormatter
将General
的单元格格式解释为#.###############
。
Excel:
代码:
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