读取excel文件并保存到数据库?

时间:2013-04-09 14:57:41

标签: oracle excel servlets vector apache-poi

我正在阅读Excel文件并将其保存到数据库。

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

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

。其他一切都很好,除了这个我得到2.01356229E8作为id。我不知道为什么我在我的id中得到2.01356229E8 ..应该是这样的201356229。

谢谢。

2 个答案:

答案 0 :(得分:1)

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

return getNumericCellValue() + "";

XSSFCell#getNumericCellValue()方法返回double,当转换为字符串时,会生成字符串"2.01356229E8"。这是从doubleString的预期Java转换,因为"2.01356229E8"201356229的科学记数法表示。 (在数学中,表示2013562292.01356229E8是等效的。)

如果您要保存到的Oracle数据库中的列是VARCHAR2,那么在将其保存到数据库之前,您需要格式化String值。这会将"201356229"存储在id

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

如果列是NUMBER,那么首先不要将它转换为字符串,只需使用数字单元格值作为double传递给数据库。

double numericId = ((XSSFCell) cellStoreVector.get(0)).getNumericCellValue();

答案 1 :(得分:0)

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

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

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