繁体   English   中英

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

[英]Apache POI reading formula value of excel cell

我正在上载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文件时,它可以工作并将其数据插入db。

在此处输入图片说明

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

在此处输入图片说明

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

先感谢您。

POI Cell类代表一个单元,并提供了许多处理该单元的方法。

当您执行sqlQuery += "'" + cell + "', "; ,您将插入Cell.toString()返回的值。 该值未明确定义为可以执行任何操作,因此您不能依赖其返回值。

您要执行的操作是使用cell.getStringCellValue()方法来“按字符串获取单元格的值” ,如javadoc所述。

除此之外,您不想执行当前正在执行的字符串连接,因为它会使您的代码易碎且容易受到SQL Injection攻击,这将使黑客能够窃取您的数据和/或删除所有表。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM