且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

阅读使用Apache POI excel文件

更新时间:2022-10-14 21:59:49

有的额外的细胞类型,除了的你在你的开关语句中捕获的。您有案件 0 CELL_TYPE_NUMERIC ), 1 CELL_TYPE_STRING )和 2 ,但 2 CELL_TYPE_FORMULA 。下面是更多的可能值:


  • 3: CELL_TYPE_BLANK

  • 4 CELL_TYPE_BOOLEAN

  • 5 CELL_TYPE_ERROR

使用细胞常数在switch语句,而不是整数常量的细胞类型,并使用所有6人来捕获所有可能的情况。

和作为@Vash已经建议,包括实际的电池键入的RuntimeException 消息。

I have created this code to read the contents of excel files using Apache POI. I am using eclipse as editor but when i ran the code i have problem in the line that I have in bold. What's the problem? The content of excel is the following:

Emp ID  Name    Salary

 1.0    john    2000000.0

 2.0    dean    4200000.0

 3.0    sam     2800000.0

 4.0    cass    600000.0


import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;



public class ExcelRead {

public static void main(String[] args) throws Exception {
    File excel = new File ("C:\\Users\\Efi\\Documents\\test.xls");
    FileInputStream fis = new FileInputStream(excel);

    HSSFWorkbook wb = new HSSFWorkbook(fis);
    HSSFSheet ws = wb.getSheet("Input");

    int rowNum = ws.getLastRowNum()+1;
    int colNum = ws.getRow(0).getLastCellNum();
    String[][] data = new String[rowNum][colNum];


    for (int i=0; i<rowNum; i++){
        HSSFRow row = ws.getRow(i);
            for (int j=0; j<colNum; j++){
                HSSFCell cell = row.getCell(j);
                String value = cellToString(cell);
                data[i][j] = value;
                System.out.println("The value is" + value);

            }
       }
    }

public static String cellToString (HSSFCell cell){

int type;
Object result;
type = cell.getCellType();

    switch(type) {


    case 0://numeric value in excel
        result = cell.getNumericCellValue();
        break;
    case 1: //string value in excel
        result = cell.getStringCellValue();
        break;
    case 2: //boolean value in excel
        result = cell.getBooleanCellValue ();
        break;
    default:
        ***throw new RunTimeException("There are not support for this type of               
       cell");***
        }

return result.toString();
}

}

There are additional cell types besides the ones you are capturing in your switch statement. You have cases for 0 (CELL_TYPE_NUMERIC), 1 (CELL_TYPE_STRING), and 2, but 2 is CELL_TYPE_FORMULA. Here are the additional possible values:

  • 3: CELL_TYPE_BLANK
  • 4: CELL_TYPE_BOOLEAN
  • 5: CELL_TYPE_ERROR

Use the Cell constants for the cell type in your switch statement instead of integer literals, and use all 6 of them to capture all possible cases.

And as @Vash has already suggested, include the actual cell type in your RuntimeException message.