2014-02-25 82 views
5

任何人都可以建議我使用Apache POI將我的xlsx工作表轉換爲java對象。如何使用Apache POI將我的xlsx工作表轉換爲java對象

當量,我的Excel工作表包含兩列

  • EMP_NO EMP_NAME
  • 01阿南德
  • 02庫馬爾

和我的java對象

Employee{ 
String empNo; 
String empName; 
} 

現在我想轉換我的Excel表格到java對象。 我曾在互聯網上嘗試過,但大多數教程都會討論迭代每一行,併爲每個成員分配對象的值。在JAXB xml解析器中是否有像Marshaller和UnMarshaller這樣的直接轉換功能?

在此先感謝。

+1

請仔細閱讀[問]和改善你的問題。如果你還沒有嘗試過任何東西,這不是要求代碼的地方。 –

+0

嗨Jonathan Drapeau,感謝您的重播,其實我已經嘗試了很多教程,所有的教程都談論有關將java對象轉換爲excel的問題,我無法看到有關java對象的excel問題,這就是我在這裏提出問題的原因。 – Anand

+0

你找到答案了嗎?我想知道如果您發現映射器或如何映射到來自Apache POI Row的對象? – Erlan

回答

6

對於給定的情景,我假設表格的每一行都代表一個員工,其中第一列保留員工編號,第二列保留員工姓名。所以你可以使用以下命令:

Employee{ 
    String empNo; 
    String empName; 
} 

創建分配員工信息的方法

assignEmployee(Row row){ 
    empNo = row.getCell(0).toString(); 
    empName = row.getCell(1).toString(); 
} 

,或者如果你願意,你可以創建一個相同的構造。

現在你只需要遍歷每一行來獲取/使用上述方法的信息。

Employee emp = new Employee(); 
Iterator<Row> itr = sheet.iterator(); 
    while(itr.hasNext()){ 
     Row row = itr.next(); 
     emp.assignEmployee(row); 
     // enter code here for the rest operation 
} 
+2

感謝您的回覆代替迭代每一行是否有任何轉換的方式,例如JAXB我們有概念稱爲Unmarshaller,marshaller幫助將對象轉換爲xml和xml到object.Is有沒有在Apache POI – Anand

1

剛剛發現兩個庫:

希望能對大家有所幫助別人。

+1

鏈接到https://github.com/jittagornp/excel-object-mapping任何種類的功能可用: - ( – rjdkolb

+1

是的,剛剛看到有人試圖編輯/更新我的評論以刪除「1.0-SNAPSHOT」。實際上似乎回購已被其創建者刪除,但在此之前已被克隆:https://github.com/pramoth/excel-object-mapping我很漂亮,它是相同的到原始文章中提到的暱稱「na5cent」:http://na5cent.blogspot.fr/2015/01/excel-object-mapping.html – maxxyme

3

試試這個庫內部使用Apache POI從Excel中轉​​換成POJO: Poji

1
I'm using POI and I'm uploading a simple program. Hope this will help you. 
Note: Remember to change filepath. 
Jars details: dom4j-1.6.1.jar, poi-3.9.jar,poi-ooxml-3.9.jar, poi-ooxml-schemas-3.11.jar, xmlbeans-2.6.0.jar 

***My Data in Excel Table:*** 
ID NAME LASTNAME 
1.0 Ena Rana 
2.0 Meena Hanly 
3.0 Tina Mounce 
4.0 Dina Cobain 

***Model or Pojo: NewEmployee.java*** 

public class NewEmployee { 
    private Double id; 
    private String firstName; 
    private String lastName; 

    public NewEmployee(){} 

    public NewEmployee(Double id, String firstName, String lastName) { 
     super(); 
     this.id = id; 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public Double getId() { 
     return id; 
    } 

    public void setId(Double id) { 
     this.id = id; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    }  
} 

***Main Method: ExcelToObject.java*** 

import java.io.File; 
import java.io.FileInputStream; 
import java.util.ArrayList; 
import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

public class ExcelToObject { 

    public static void main(String[] args) { 
     try 
      { 
       FileInputStream file = new FileInputStream(new File("/home/ohelig/eclipse/New Worksheet.xlsx")); 

       //Create Workbook instance holding reference to .xlsx file 
       XSSFWorkbook workbook = new XSSFWorkbook(file); 

       //Get first/desired sheet from the workbook 
       XSSFSheet sheet = workbook.getSheetAt(0); 

       ArrayList<NewEmployee> employeeList = new ArrayList<>(); 
    //I've Header and I'm ignoring header for that I've +1 in loop 
       for(int i=sheet.getFirstRowNum()+1;i<=sheet.getLastRowNum();i++){ 
        NewEmployee e= new NewEmployee(); 
        Row ro=sheet.getRow(i); 
        for(int j=ro.getFirstCellNum();j<=ro.getLastCellNum();j++){ 
         Cell ce = ro.getCell(j); 
        if(j==0){ 
         //If you have Header in text It'll throw exception because it won't get NumericValue 
         e.setId(ce.getNumericCellValue()); 
        } 
        if(j==1){ 
         e.setFirstName(ce.getStringCellValue()); 
        } 
        if(j==2){ 
         e.setLastName(ce.getStringCellValue()); 
        }  
        } 
        employeeList.add(e); 
       } 
       for(NewEmployee emp: employeeList){ 
        System.out.println("ID:"+emp.getId()+" firstName:"+emp.getFirstName()); 
       } 
       file.close(); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
} 
相關問題