org.apache.poi.xssf.usermodel.XSSFCell中Java中的Java Excel数据上载错误

org.apache.poi.xssf.usermodel.XSSFCell中Java中的Java Excel数据上载错误,java,apache,apache-poi,Java,Apache,Apache Poi,我尝试使用Apache.POI将excel数据上传到数据库中。它们的函数给了我一个错误,比如 Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: org.apache.poi.xssf.usermodel.XSSFCell cannot be cast to java.lang.Integer 代码段错误发生在 for (Iterator iterator = dataHolder.iterator(); i

我尝试使用Apache.POI将excel数据上传到数据库中。它们的函数给了我一个错误,比如

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: org.apache.poi.xssf.usermodel.XSSFCell cannot be cast to java.lang.Integer
代码段错误发生在

for (Iterator iterator = dataHolder.iterator(); iterator.hasNext();) {
        List list = (List) iterator.next();
         i++;
        if (i > 0) {  
            ID =  (int) list.get(0);
            Employee_Number = list.get(1).toString();
            FirstName = list.get(2).toString();
            LastName = list.get(3).toString();
            EmailAddress = list.get(4).toString();
            PdfName = list.get(5).toString();
            Sup_EmailAddress = list.get(6).toString();
            PassCode = list.get(7).toString();
有人能告诉我为什么会出现这种错误吗?

ID=(int)list.get(0)引发错误,因为单元格中的数据无法转换为int。请尝试将其保存为字符串

id = (String) list.get(0);
或者像一个长的

id = (long) list.get(0);
或者处理异常

try {
  ID = (int) list.get(0);
} catch (ClassCastException e) {
  // id is not a number
}
根据,您可以使用
getNumericCellValue()

public double getNumericCellValue()

以数字形式获取单元格的值

为了安全地检查您是否处理了一个实际的数字,您可以按如下方式重新编写代码片段:

import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;

int ID;
// ... loop here ...
    XSSFCell cell = list.get(0);
    if(CellType.NUMERIC == cell.getCellType()) {
        ID =  new Double(cell.getNumericCellValue()).intValue(); 
    } else {
        // handle this case separately... 
    }
// end loop
上述代码段避免了不必要的强制转换和/或尝试和错误猜测


希望有帮助。

是否有其他方法将其保留为int值?如果值不是数字,则无法将其保存为数字。但是,如果不需要,可以通过处理异常来跳过它。您应该在
apache poi
version
XSSFCell中提到它。getCellType
返回一个
CellType
。在最新的稳定版本中,ApachePOI3.17返回一个
int
。这里有
XSSFCell.getCellTypeEnum
需要获取
CellType
。这是一个有用的提示。我依赖于答案中链接的最新公共JavaDoc。在此版本中,
getCellType()
未标记为已弃用,但是,
getCellTypeEnum()
标记为已弃用。很混乱,不是吗?链接的JavaDoc版本声明“已弃用。请改用getCellType”。是的,这令人困惑。apachepoi程序员正在更新最新的公共JavaDoc,使其始终成为当前夜间构建的JavaDoc,而不是最新的稳定版本。许多用户对此感到困惑。专业用户绝对不会使用任何夜间内置的生产性使用。因此,从下载的源代码中始终拥有自己的Javadoc是必要的。