Home » Java » getting data by column name apache poi excel

getting data by column name apache poi excel

Posted by: admin December 28, 2021 Leave a comment

Questions:

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.

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)

###

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;