2015-12-23 57 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