Apache POI读取excel单元格的公式值

我正在上传Excel文件的应用程序,并将其值插入数据库。

我的代码如下所示:

FileInputStream inputStream = new FileInputStream(excelFile); String fileExtension = FilenameUtils.getExtension(temp1); Workbook wb = null; if(fileExtension.equalsIgnoreCase("xls")){ wb = new HSSFWorkbook(inputStream); } else { wb = new XSSFWorkbook(inputStream); } if (wb != null){ logger.info("Read File"); } Sheet sheet = null; Row row = null; Cell cell = null; dbConnect(); sheet = wb.getSheetAt(0); int rows = sheet.getPhysicalNumberOfRows() + 1; for (int y=1; y<rows; y++){ row = sheet.getRow(y); int cells = row.getPhysicalNumberOfCells(); String sqlQuery = "INSERT INTO paycheck(" + "paycheckId, payTitle, payEmployee, payDisDate, payBasicSalary, payIncentive, payAllowance, paySpecialAllowance, " + "payEducation, payTotal, payTax, payOther, payAdvanced, payDeductible, payNet, payDuration, payRate)" + "VALUES("; for (int z=0; z<cells; z++){ cell = row.getCell(z); if(z != cells -1){ sqlQuery += "'" + cell + "', "; } else { sqlQuery += cell + ")"; } } stmt.execute(sqlQuery); } dbDisConnect(); 

所以,当我上传一个如下所示的Excel文件,它的工作原理,并将其数据插入到数据库。

在这里输入图像说明

但是,当我上传一个如下所示的Excel文件时,db不会被更新。

在这里输入图像说明

请问如何解决这个问题,所以即使单元格的值是= ROUNDUP((600),2),而不是600,它仍然会更新数据库。

先谢谢你。

POI Cell类表示一个单元格,并提供许多用于处理单元格的方法。

当你做sqlQuery += "'" + cell + "', "; ,你要插入Cell.toString()返回的值。 这个值没有被明确地定义为做任何事情,所以你不能依赖它返回的东西。

你想要做的就是使用cell.getStringCellValue()方法来“获取单元格的值” ,就像javadoc声明的那样。

除此之外,您不希望执行您当前正在执行的string连接,因为这会使您的代码变得脆弱并且容易受到SQL注入攻击,这将允许黑客窃取您的数据和/或删除所有表。

您应该使用PreparedStatement ,使用参数标记( ? )和setXxx()方法。