How to group the values which are in excel to a HashMap

拈花ヽ惹草 提交于 2019-12-25 02:01:24

问题


i have the following excel:

Method Name       Status Code
getLoggedinUserDetails  400
createRequisition   400
excelMDM            400

and i am able to print the values as they are in excel using the following code :

package com.poc.excelfun;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;

public class ReadExcelData {
    public static void main(String[] args) {
        try {

            FileInputStream file = new FileInputStream(new File("attachment_status.xls"));

            //Get the workbook instance for XLS file 
            HSSFWorkbook workbook = new HSSFWorkbook(file);

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

            //Iterate through each rows from first sheet
            Iterator<Row> rowIterator = sheet.iterator();
            while(rowIterator.hasNext()) {
                Row row = rowIterator.next();

                //For each row, iterate through each columns
                Iterator<Cell> cellIterator = row.cellIterator();
                while(cellIterator.hasNext()) {

                    Cell cell = cellIterator.next();

                    switch(cell.getCellType()) {
                        case Cell.CELL_TYPE_BOOLEAN:
                             System.out.print(cell.getBooleanCellValue() + "\t\t");
                            break;
                        case Cell.CELL_TYPE_NUMERIC:
                           System.out.print((int)cell.getNumericCellValue()  + "\t\t");
                            break;
                        case Cell.CELL_TYPE_STRING:
                             System.out.print(cell.getStringCellValue() + "\t\t");
                            break;
                    }
                }
                System.out.println("");
            }
            file.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

i want to put the values excluding title Method Name Status Code and values only like Key - > getLoggedinUserDetails and value -> 400 in Hashmap

how to do this.

Please help me to find this.


回答1:


Try this code:

Iterator<Cell> cellIterator = row.cellIterator();

String key = null
int value = Integer.MIN_VALUE; // use a default value that will never occur in the sheet

HashMap<String, Integer> map = new HashMap<String, Integer>();

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

    switch(cell.getCellType()) 
    {
        case Cell.CELL_TYPE_NUMERIC:
            value = cell.getNumericCellValue(); break;
        case Cell.CELL_TYPE_STRING:
             key = cell.getStringCellValue(); break;
    }

    if(key != null && value != Integer.MIN_VALUE)
    {
        map.put(key, value);
        key = null;
        value = Integer.MIN_VALUE;
    }
}

Not the cleanest solution but should work with the iterator for your data format.

If your Spreadsheet framework allows to look up specific cells via index you can make it easier by replacing the while-loop and kust directly retrieve the values from the cells.



来源:https://stackoverflow.com/questions/16458640/how-to-group-the-values-which-are-in-excel-to-a-hashmap

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!