Чтение данных из таблицы Excel как есть - PullRequest
0 голосов
/ 25 апреля 2020

Мне нужно прочитать данные из листа Excel. В ячейке данные составляют 30,44%, но когда я читаю данные из ячейки, вывод составляет 0,3044, а нужный мне вывод составляет 30,44%, как в Excel

public String getDataFromExcelWithColNo(String sheetname, String colno, String rowno) {
        String data = null;
        try {
            workbook = new XSSFWorkbook(filepath);
            sheet = workbook.getSheet(sheetname);
             XSSFRow firstrow = sheet.getRow(Integer.parseInt(rowno));
            int col = Integer.parseInt(colno);
            try {
                int celltype = sheet.getRow((Integer.parseInt(rowno)) - 1).getCell(col - 1).getCellType();
                if (celltype == XSSFCell.CELL_TYPE_STRING) {
                    data = sheet.getRow((Integer.parseInt(rowno)) - 1).getCell(col - 1).getStringCellValue().toString()
                            .trim();
                    System.out.println("Value: " + data);
                } else if (celltype == XSSFCell.CELL_TYPE_NUMERIC) {
                    data = Double.toString(
                            sheet.getRow((Integer.parseInt(rowno)) - 1).getCell(col - 1).getNumericCellValue());
                } else if (celltype == XSSFCell.CELL_TYPE_BOOLEAN) {
                    data = String.valueOf(
                            sheet.getRow((Integer.parseInt(rowno)) - 1).getCell(col - 1).getBooleanCellValue());
                }
            } catch (NullPointerException ne) {
                System.out.println("Returning null value.");
                data = "";
            }
        } catch (IOException io) {

        }
        return data;
    }

1 Ответ

1 голос
/ 25 апреля 2020

Вы можете узнать, отформатирована ли ячейка в процентах, протестировав формат данных ячейки

else if (celltype == CellType.NUMERIC) {
                    if (cellstyle.getDataFormatString().contains("%")) {
                        data = Double.toString(sheet.getRow((Integer.parseInt(rowno)) - 1).getCell(col - 1).getNumericCellValue()*100);
                        System.out.println("Value: " + data + "%");
                    } else {
                        data = Double.toString(sheet.getRow((Integer.parseInt(rowno)) - 1).getCell(col - 1).getNumericCellValue());
                        System.out.println("Value: " + data);
                    }

Полный блок:

try {
                CellType celltype = sheet.getRow((Integer.parseInt(rowno)) - 1).getCell(col - 1).getCellType();
                CellStyle cellstyle = sheet.getRow((Integer.parseInt(rowno)) - 1).getCell(col - 1).getCellStyle();
                if (celltype == CellType.STRING) {
                    data = sheet.getRow((Integer.parseInt(rowno)) - 1).getCell(col - 1).getStringCellValue().toString()
                            .trim();
                    System.out.println("Value: " + data);
                } else if (celltype == CellType.NUMERIC) {
                    if (cellstyle.getDataFormatString().contains("%")) {
                        data = Double.toString(sheet.getRow((Integer.parseInt(rowno)) - 1).getCell(col - 1).getNumericCellValue()*100);
                        System.out.println("Value: " + data + "%");
                    } else {
                        data = Double.toString(sheet.getRow((Integer.parseInt(rowno)) - 1).getCell(col - 1).getNumericCellValue());
                        System.out.println("Value: " + data);
                    }
                } else if (celltype == CellType.BOOLEAN) {
                    data = String.valueOf(
                            sheet.getRow((Integer.parseInt(rowno)) - 1).getCell(col - 1).getBooleanCellValue());
                }
            } catch (NullPointerException ne) {
                System.out.println("Returning null value.");
                data = "";
            }
        }

enter image description here

...