从Excel文件将数据存储到Java Collection

时间:2016-05-05 14:30:47

标签: java excel collections hashmap apache-poi

我想从Excel文件中读取数据,并希望将类似HashMap的内容存储到Java集合中。

我通过Apache POI实现了Excel阅读 - 这部分工作得非常好。 现在我想知道如何将这些数据存储到HashMap中。

我创建了1个包含Excel数据值的POJO类。

Class EmpXcel
    private String emp_name;
    private String emp_job;

     // parameterised constructor

     // getter-setter

现在如果我创建了这个特定POJO类的类型的HashMap。

对于前。 Map<String, EmpXcel> map = new HashMap<String, EmpXcel>();

这是我从Excel中读取数据的代码。

while(itr.hasNext()){
            Row nextRow = itr.next();
            // For each row, iterate through all the columns
            Iterator<Cell> cellIterator = nextRow.cellIterator();

            while (cellIterator.hasNext()) 
            {
                Cell cell = cellIterator.next();

                switch (cell.getCellType()) 
                {
                    //  if cell is numeric format   
                    case Cell.CELL_TYPE_NUMERIC:
                        System.out.print(cell.getNumericCellValue()+",");
                        break;

                    // if cell is string format
                    case Cell.CELL_TYPE_STRING:
                        System.out.print(cell.getStringCellValue() + ",");
                        break;
                }
            } 
         System.out.println();
    }

我不确定如何将此数据存储到POJO类型的HashMap中(此处为EmpXcel)。

编辑:Excel表:

Emp_Name |  Emp_Job

Travis   |  Technical Assistant

John     |  Professor

另外我想让它更通用 - 想为不同的Excel文件创建单个Java类(不管行/列的数量)

请与我分享您的一些见解,以便我可以按照这种方式进行。

感谢。

1 个答案:

答案 0 :(得分:1)

回答你的上一条评论@inityk 通过使用getColumnIndex(),您可以访问所有单元格,然后可以验证其中的数据。

List<EmpXcel> empXcelList=new Arrayist<EmpXcel>();
   while(itr.hasNext()){
        Row nextRow = itr.next();
        EmpXcel empXcelPOJO = new EmpXcel();
        // For each row, iterate through all the columns
        Iterator<Cell> cellIterator = nextRow.cellIterator();

        while (cellIterator.hasNext()) 
        {
            Cell cell = cellIterator.next();

            if(cell.getColumnIndex()==0) 
            {
                case Cell.CELL_TYPE_NUMERIC:
                    System.out.print("Name should not be numeric");
                    break;

                // if cell is string format
                case Cell.CELL_TYPE_STRING:
                    empXcelPOJO.setEmpName(cell.getStringCellValue())
                    break;
            }elseif(cell.getColumnIndex()==1) 
            {
                case Cell.CELL_TYPE_NUMERIC:
                    System.out.print("Name should not be numeric");
                    break;

                // if cell is string format
                case Cell.CELL_TYPE_STRING:
                    empXcelPOJO.setEmpJob(cell.getStringCellValue())
                    break;
            }
        } 
     empXcelList.add(empXcelPOJO);
    }