Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

getting data by column name apache poi excel

I am using apache POI for excel import and parsing . I have to get the data by passing column name .

this is my code

JSONObject jo = new JSONObject();
        JSONArray dataCollection = new JSONArray();
        JSONObject data = null;
        try {
            String tempCampaignFilesPath = getSessionData("userPath") + System.getProperty("file.separator") + "tempCampaignFiles";
            File someFile = new File(tempCampaignFilesPath, fileName);

            /* read from this file */

            FileInputStream fileInputStream = new FileInputStream(someFile);
            HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
            HSSFSheet sheet = workbook.getSheet(sheetName);
            int rowNum = sheet.getLastRowNum() + 1;
            int colNum = sheet.getRow(0).getLastCellNum();
            Row row = null;
            Cell cell = null;

            for (int i = 1; i < rowNum; i++) {
                row = sheet.getRow(i);
                data = new JSONObject();

                for (int j = 0; j < colNum; j++) {
                    cell = row.getCell(j);
                    data.put(columnList.get(j), cellToString(cell));
                }
                dataCollection.put(data);
            }
            fileInputStream.close();
            // someFile.delete();
            jo.put("tableData", dataCollection);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return jo;

There is a provision for column index but how could I do it by column name.

Please help me.

like image 817
Pawan Pandey Avatar asked Dec 15 '15 13:12

Pawan Pandey


People also ask

How does selenium read data from column name in Excel?

Below are the methods will use to read the data which are available in the above classes: getSheet(“sheetName”) – Get sheet with the given name. getLastCellNum() – Get the index of the last cell contained in the row Plus one as index starts from ZERO. getStringCellValue() – Get the value of the cell as a String.


2 Answers

You have to convert column name to index:

int colIdx = CellReference.convertColStringToIndex(letter);
CellUtil.getCell(row, colIdx)

or if you need convert column index to string:

String colName = CellReference.convertNumToColString(colIdx)
like image 101
dlopatin Avatar answered Oct 19 '22 04:10

dlopatin


Please find below the code an another workaround for this .Please see the comments in code to be more clear what I have done.

        JSONObject jo = new JSONObject();
        JSONArray dataCollection = new JSONArray();
        JSONObject data = null;
        try {
            String tempCampaignFilesPath = getSessionData("userPath") + System.getProperty("file.separator") + "tempCampaignFiles";
            File someFile = new File(tempCampaignFilesPath, fileName);

            /* read from this file */

            FileInputStream fileInputStream = new FileInputStream(someFile);
            HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
            HSSFSheet sheet = workbook.getSheet(sheetName);

            int rowNum = sheet.getLastRowNum() + 1;
            int colNum = sheet.getRow(0).getLastCellNum();
            Row row = null;
            Cell cell = null;

            /* first row data for column names and index */

            Map<String, Integer> colMapByName = new HashMap<String, Integer>();
            if (sheet.getRow(0).cellIterator().hasNext()) {
                for (int j = 0; j < colNum; j++) {
                    colMapByName.put(cellToString(sheet.getRow(0).getCell(j)), j);
                }
            }
            System.out.println(colMapByName);//shows the indexes of columns populated by traversing first row
            /* first row data */

            for (int i = 1; i < rowNum; i++) {
                row = sheet.getRow(i);
                data = new JSONObject();
                //colMap consists the columnnames and alias name for it
                for (Entry<String, String> colData : colMap.entrySet()) {
                    cell = row.getCell(colMapByName.get(colData.getValue()));//gives the index of column from  colMapByName Map by passing column name
                    data.put(colData.getKey(), cellToString(cell));//now the data passed to the alias for the column tobe used in application
                }
                dataCollection.put(data);
            }
            fileInputStream.close();
            someFile.delete();
            jo.put("tableData", dataCollection);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return jo;
like image 6
Pawan Pandey Avatar answered Oct 19 '22 05:10

Pawan Pandey