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

问题描述:

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

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

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

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

谢谢。

+0

为什么在将数据写入数据库之前将数字转换为字符串?你不应该将它们存储为一个数字吗? – Gagravarr 2013-04-10 09:09:13

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

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

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

这不是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,那么你就需要把它保存到数据库之前格式化字符串值。这将存储在"201356229"id

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

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

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