Ana*_*and 10 java apache excel apache-poi
任何人都建议我使用Apache POI将我的xlsx表转换为java对象.
eq,我的Excel工作表包含两列
和我的java对象
Employee{
String empNo;
String empName;
}
Run Code Online (Sandbox Code Playgroud)
现在我想将我的Excel工作表转换为java对象.我已经尝试过在互联网上,但是大多数教程都讨论了迭代每一行并为每个成员分配值.是否有任何功能,如Marshaller和UnMarshaller在JAXB xml解析器中直接转换.
提前致谢.
San*_*ngh 11
对于给定的场景,我假设工作表的每一行代表一个员工,其中第一列保留员工编号,第二列保留员工姓名.所以你可以使用以下内容:
Employee{
String empNo;
String empName;
}
Run Code Online (Sandbox Code Playgroud)
创建一种将Employee信息分配为的方法
assignEmployee(Row row){
empNo = row.getCell(0).toString();
empName = row.getCell(1).toString();
}
Run Code Online (Sandbox Code Playgroud)
或者如果你想,你可以为它创建一个构造函数.
现在,您只需要迭代每一行以使用上述方法获取/使用信息.
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
}
Run Code Online (Sandbox Code Playgroud)
检查下面的存储库。它的开发始终牢记“易用性”。 https://github.com/millij/poi-object-mapper
初始版本已发布到Maven Central。
<dependency>
<groupId>io.github.millij</groupId>
<artifactId>poi-object-mapper</artifactId>
<version>1.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
作品与杰克逊类似。像下面这样注释你的bean..
@Sheet
public class Employee {
// Pick either field or its accessor methods to apply the Column mapping.
...
@SheetColumn("Age")
private Integer age;
...
@SheetColumn("Name")
public String getName() {
return name;
}
...
}
Run Code Online (Sandbox Code Playgroud)
并阅读..
...
final File xlsxFile = new File("<path_to_file>");
final XlsReader reader = new XlsReader();
List<Employee> employees = reader.read(Employee.class, xlsxFile);
...
Run Code Online (Sandbox Code Playgroud)
目前,所有原始数据类型都受支持。仍在努力添加对Date等的支持Formula。
希望这可以帮助。
小智 5
我正在使用 POI 并且正在上传一个简单的程序。希望这会帮助你。
注意:请记住更改文件路径。
jar 详细信息: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
我在 Excel 表中的数据:
ID NAME LASTNAME
1.0 Ena Rana
2.0 Meena Hanly
3.0 Tina Mounce
4.0 Dina Cobain
Run Code Online (Sandbox Code Playgroud)
模型或 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;
}
}
Run Code Online (Sandbox Code Playgroud)
主要方法: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();
}
}
}
Run Code Online (Sandbox Code Playgroud)