使用ApachePOI(java)在二维数组中存储excel单元格。尽管我将所有Excel单元格格式化为“0”,但仍返回异常;“文本”;

使用ApachePOI(java)在二维数组中存储excel单元格。尽管我将所有Excel单元格格式化为“0”,但仍返回异常;“文本”;,java,arrays,excel,apache-poi,Java,Arrays,Excel,Apache Poi,我对使用ApachePOI非常陌生(事实上,我对Java也很陌生!),遇到了一个我无法确定如何修复的异常 显然,不能在一个数组中存储两种不同的数据类型,因此我选择了包含数据的每一列,并在Excel中将单元格格式转换为“文本” 然后,我尝试将此数据存储在具有以下内容的数组中: String cellData[][] = new String[rows][cols]; System.out.println(rows+" entries found with "+cols+"

我对使用ApachePOI非常陌生(事实上,我对Java也很陌生!),遇到了一个我无法确定如何修复的异常

显然,不能在一个数组中存储两种不同的数据类型,因此我选择了包含数据的每一列,并在Excel中将单元格格式转换为“文本”

然后,我尝试将此数据存储在具有以下内容的数组中:

String cellData[][] = new String[rows][cols];            
System.out.println(rows+" entries found with "+cols+" columns of data");

//iterate over every row and store cell data;
for(int i=0; i<rows; i++){
    row = worksheet.getRow(i);
    if(row != null){
        for(int j=0;j<cols;j++){
            cell = row.getCell(j);
            if(cell != null){
                try{
                    cellData[i][j] = cell.getStringCellValue();
                }catch(IllegalStateException e){
                    System.out.println("Cell data is not a string(text)");
                }
            }
        }
    }
}

有趣的是,当我将其从cell.getStringCellValue()更改为cell.getNumericCellValue()时,IllegalStateException会更改为“无法从文本单元格获取数值”。。。我认为excel文档,尽管将单元格转换为文本,但实际上并没有转换为字符串数据并将其作为其固有的数据类型传递?再次感谢

看起来有些单元格是数字类型,有些是字符串类型。您需要分别处理数字单元格类型和字符串单元格类型。我还没有检查我这边,但肯定。。。以下内容将起作用

Cell cell = row.getCell(j); 
CellValue cellValue = evaluator.evaluate(cell);
switch (cellValue.getCellType()) {
    case Cell.CELL_TYPE_NUMERIC:
    cellData[i][j] = String.valueOf(cellValue.getNumberValue());
    break;
    case Cell.CELL_TYPE_STRING:
    cellData[i][j] = cell.getStringCellValue();
    break
}    

打印错误。给出e.printStackTrace();在挡块中。让我们知道错误跟踪。在上面的代码中还包括变量行、工作表和单元格的声明。非常感谢!valueOf()是我所缺少的使这一切正常工作的函数。使用DataFormatter可能比String.valueOf更好,这样可以在excel中保留应用于单元格的格式化字符串。否则,您的单元格字符串很可能与您看到的内容不匹配
Cell cell = row.getCell(j); 
CellValue cellValue = evaluator.evaluate(cell);
switch (cellValue.getCellType()) {
    case Cell.CELL_TYPE_NUMERIC:
    cellData[i][j] = String.valueOf(cellValue.getNumberValue());
    break;
    case Cell.CELL_TYPE_STRING:
    cellData[i][j] = cell.getStringCellValue();
    break
}