Как использовать заголовок столбца Excel в качестве ключа в Java с помощью Apache-poi? - PullRequest
0 голосов
/ 31 мая 2018

Я хочу использовать заголовок моего столбца Excel в качестве ключа, чтобы я мог печатать столбцы определенных данных с помощью этого ключа.Ниже приведен мой код, в котором я использовал строку в качестве ключа, но не смог сделать это по столбцу:

XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = workbook.getSheet("Bill");
Iterator<Row> rowIterator = sheet.iterator();
HashMap<Integer,List<String>> m= new HashMap<>();
int rownum=0; 

while (rowIterator.hasNext()) {
    Row row = rowIterator.next();
    List<String> lst=new LinkedList<String>();  
    Iterator<Cell> cellIterator = row.cellIterator();
    while (cellIterator.hasNext()) {
        Cell cell = cellIterator.next();
        switch (cell.getCellType()) {
        case Cell.CELL_TYPE_NUMERIC:
            int a=(int) cell.getNumericCellValue();
            lst.add(Integer.toString(a)); 
            break;
        case Cell.CELL_TYPE_STRING:                        
            lst.add(cell.getStringCellValue()); 
            break;                     
           }             
    }
    m.put(rownum,lst);
    rownum++;
}

for (int i:m.keySet())
{
    System.out.println(i+"-----"+m.get(i));
}

1 Ответ

0 голосов
/ 31 мая 2018

Прочитайте Excel как код ниже.поместите первый столбец в карту с ключом «столбцы» после чтения Excel, извлеките список столбцов с помощью

Список столбцов = (Список) dataList.get (0) .get («столбцы»);

public List<HashMap<String, Object>> readExcel(InputStream inputStream, String dateFormat) {
    ArrayList<HashMap<String, Object>> result = new ArrayList<HashMap<String, Object>>();
    try {
        XSSFWorkbook workbook;
        workbook = new XSSFWorkbook(inputStream);
        XSSFSheet spreadsheet = workbook.getSheetAt(0);
        Iterator<Row> rowIterator = spreadsheet.iterator();

        int c = 0;
        ArrayList<String> columns = new ArrayList<String>();
        while (rowIterator.hasNext()) {
            row = (XSSFRow) rowIterator.next();
            Iterator<Cell> cellIterator = row.cellIterator();
            HashMap<String, Object> map = new HashMap<String, Object>();

            if (c == 0) {
                while (cellIterator.hasNext()) {
                    Cell cell = cellIterator.next();
                    if (cell.getStringCellValue().trim() != null && !cell.getStringCellValue().trim().equals("")) {
                        columns.add(cell.getStringCellValue().trim());
                    }
                }
            } else {
                for (int i = 0; i < columns.size(); i++) {
                    Cell cell = row.getCell(i);
                    if (cell != null) {
                        switch (cell.getCellType()) {
                        case Cell.CELL_TYPE_NUMERIC:
                            if (DateUtil.isCellInternalDateFormatted(cell)) {
                                DateFormat df = new SimpleDateFormat(dateFormat);
                                map.put(columns.get(i), df.format(cell.getDateCellValue()));
                                break;
                            } else {
                                map.put(columns.get(i), cell.getNumericCellValue());
                                break;
                            }

                        case Cell.CELL_TYPE_STRING:
                            map.put(columns.get(i), cell.getStringCellValue().trim());
                            break;

                        }
                    } else {
                        map.put(columns.get(i), "");
                    }
                }
            }
            if (c == 0) {
                map.put("columns", columns);
            }
            c++;
            if (!isEmptyRow(map)) {
                map.put("rowNumber", c);
                result.add(map);
            }
        }
        inputStream.close();
        return result;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}
...