0

我正在读取一个 Excel 文件并将其保存到数据库中。

我正在迭代每一行和单元格并将其保存到矢量对象,然后使用循环,将其保存到数据库中。当我保存它的数据库时,我正在这样做:

id = ((XSSFCell) cellStoreVector.get(0)).toString()==null?"":((XSSFCell) cellStoreVector.get(0)).toString();

对于每一列。除了我得到 2.01356229E8 作为 id 的这个之外,其他一切都很好。我不知道为什么我的 id 中会出现 2.01356229E8 ..应该是这样的 201356229。

谢谢你。

4

2 回答 2

1

这不是 Excel 显示问题,因为该值已使用 Apache POI 提取到 Java 中。但是当XSSFCell#toString()被调用时,Apache POI 代码使用以下表达式将具有类型的单元格转换为CELL_TYPE_NUMERICin 中的字符串toString()

return getNumericCellValue() + "";

XSSFCell#getNumericCellValue()方法返回 a double,将其转换为字符串时会生成字符串"2.01356229E8"。这是预期的从 adouble到 a的 Java 转换,String因为"2.01356229E8"它是201356229. (在数学中,表示2013562292.01356229E8是等价的。)

如果您要保存到的 Oracle 数据库中的列是 a VARCHAR2,那么您需要在将字符串值保存到数据库之前对其进行格式化。这将存储"201356229"id

DecimalFormat df = new DecimalFormat("#");
id = df.format( ((XSSFCell) cellStoreVector.get(0)).getNumericCellValue() );

如果列是 a NUMBER,则不要先将其转换为 String ,只需使用数字单元格值作为 adouble传递给数据库。

double numericId = ((XSSFCell) cellStoreVector.get(0)).getNumericCellValue();
于 2013-04-09T17:59:16.140 回答
0

这听起来像是 Excel 显示问题。Excel 不知道您希望它是一个整数。

您可能希望使其更宽(选择整列,右键单击,列宽...并输入 10)。

您也可以选择列,右键单击,格式化单元格...,选择数字,将小数位数更改为 0)。

于 2013-04-09T15:08:09.130 回答