需要使用apache POI在java中用60列读取巨大的excel文件

时间:2015-12-23 19:59:28

标签: java excel apache

我正在阅读大约60列和500行的excel文件。我正在使用Apahce POI在我们的java对象表单中转换它们。但所有这些我用switch语句做它并根据列索引做出不同的情况。我不认为迭代excel并将其转换为java对象是正确的方法。所以你可以建议我这样做的好方法。

目前这样做......

public class Employee
{
private String empNo;
private String empName;
...
..
...
....like this 60 column header 
...
}

我不喜欢这样做,有没有其他方式可以建议我。 提前感谢您的帮助 在另一堂课。

FileInputStream file = new FileInputStream(new File("C:\\test.xls"));

HSSFWorkbook workbook = new HSSFWorkbook(file);
HSSFSheet sheet = workbook.getSheetAt(0);
List<Employee> list = new AraayList<Employee>();
Iterator<Row> rowIterator = sheet.iterator();
while(rowIterator.hasNext()) {
    Employee e = new Employee();
    Row row = rowIterator.next();
    Iterator<Cell> cellIterator = row.cellIterator();
    while(cellIterator.hasNext()) {

        Cell cell = cellIterator.next();

        switch(cell.getColumnIndex()) {
            case 0:
                e.setEmpName(cell.getStringCellValue());
                break;
            case 1:
                e.setEmpNo(cell.getNumericCellValue());
                break;
                .....
                ......
                ......
                ..
                ...
            case 60: e.setStreet(cell.getStringCellValue());
                list.add(e);
                break;
        }
    }
}

} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

1 个答案:

答案 0 :(得分:0)

如果你想要一个POJO,那么除了在POJO中传输setter代码之外我不认为有更好的方法。

public class Employee{
    private String fieldA;
    private String fieldB;
    // ... 60 such fields

    public getFieldA(){
         return fieldA;
    }
    // ...60 such getters(and setters);

    public void setField(int index,String value){
        switch(index){
            case 0:
                fieldA=value;
            // ...60 such cases
        }
    }
}

在驱动程序类中,您可以通过编写来使用它:

Iterator<Row> rowIterator = sheet.iterator();
while(rowIterator.hasNext()){
    HSSFRow row = (HSSFRow) rowIterator.next();
    Employee emp=new Employee();
    for(int i=0;i<60;i++){
        emp.setField(i,cell.row.getCell(i).getStringCellValue());
    }
}