2015-12-23 61 views
0

我正在阅读大约60列和500行的Excel文件。我使用Apahce POI将它们转换为我们的java对象形式。但是,我正在使用switch语句并基于列索引创建不同的情况。我不认为这是迭代excel并将其转换为java对象的正确方法。所以你可以建议我这样做的好方法。需要阅读巨大的Excel文件与Java 60列使用Apache POI

目前做这样....

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(); 
} 

回答

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()); 
    } 
} 
+0

我才能给予好评的问题吗? – user1111880