当前位置: 首页 > 知识库问答 >
问题:

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

谭文林
2023-03-14

我正在开发一个上传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。

提前谢谢你。

共有1个答案

陈鸿才
2023-03-14

POI单元格类表示一个单元格,并提供了许多使用该单元格的方法。

当您执行sqlQuery=“'单元格',” ,您正在插入由单元格返回的值。toString()。该值没有明确定义为执行任何操作,因此您不能依赖于它返回的内容。

你要做的是使用单元格。getStringCellValue()方法,以“将单元格的值作为字符串获取”,正如javadoc所述。

除此之外,你不想做你目前正在做的字符串连接,因为它使你的代码脆弱,容易受到SQL注入攻击,这将允许黑客窃取你的数据和/或删除你的所有表。

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

 类似资料:
  • 我的C#. Net应用程序通过使用excel公式字符串加载和读取excel工作表单元格值。 例如,excel工作表位置和选项卡名称及其单元格行/列将作为公式字符串提供。 'D:\DataX[数据.Xls]EOD'$A5级 根据上述公式-C#应用程序加载数据。Xls,并打开EOD选项卡,应读取第5行A列值。 寻找在C#中完成的最佳方式。Net框架。

  • 我正在使用apache POI更改excel表中的单元格。更改值后,与已更改的单元格对应的公式的单元格不会更新。 当我进入excel并单击带有公式的单元格,然后在函数栏中单击时,公式会更新。 A1仍然等于3,直到我点击那个单元格。 刷新工作簿或工作表也不起作用。这是excel或POI的问题吗?有人能想出一个变通办法吗?

  • 我有一个带有sheet1 excel文件,该文件的第2行和第10列有一个我需要读取的值。这是我的代码。 获取了cell对象Excel.Range后,我不知道如何读取该单元格的内容。我试着把它转换成数组并在它上面循环,我试着转换成字符串数组等等,我确信这是非常简单的。有没有直接的方法只得到一个字符串的单元格值?

  • 问题内容: 我必须将 算法从Excel工作表移植到python代码, 但必须对 Excel文件中的算法 进行 反向工程 。 Excel工作表非常复杂,它包含许多单元格,在这些单元格中有引用其他单元格的公式(也可以包含公式或常数)。 我的想法是使用python脚本分析工作表,以构建一种单元格之间的依存关系表,即: A1取决于B4,C5,E7公式:“ = sqrt(B4)+ C5 * E7” A2取决

  • 我试图从excel文件中读取所有数据,其中也有一些公式单元格,但我不知道哪个单元格是公式单元格。如何读取单元格中的所有值,而不考虑单元格的类型。 我的代码看起来像这样 我得到的公式单元格值为0