Почему файл Excel, загруженный с использованием сервлетов Java и библиотеки Apache POI, жалуется на формат или расширение файла? - PullRequest
0 голосов
/ 04 марта 2019

Я создал класс сервлетов Java.Метод getEmployeeExperienceInExcel() этого сервлета создает файл Excel, в который должны быть напечатаны данные сотрудника (employee details are featched from database). Ниже приведен код, который я написал в методе getEmployeeExperienceInExcel() для создания файла Excel.

public void getEmployeeExperienceInExcel(HttpServletRequest request, HttpServletResponse response, Date startDate,
        Date endDate, String org1, String org2, String org3) throws IOException {

    ServletOutputStream os = response.getOutputStream();
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "attachment; filename=\"employeeDetails.xlsx\"");

    String[] titles = { "First name", "last name", "employee number", "Experience" };

    List<Employee> employeeList = new ArrayList<Employee>();
    //Get all emplyees of the organization
    employeeList = getEmployee(org1, org2, org3, startDate, endDate);

    try {

        Date startDateForString = startDate;
        Date endDateForString = endDate;

        DateFormat df = new SimpleDateFormat("dd.MM.yyyy");
        String startDateInString = df.format(startDateForString);
        String endDateInString = df.format(endDateForString);

        // Creating a Workbook
        XSSFWorkbook workbook = new XSSFWorkbook();

        // Creating spreadsheet 
        XSSFSheet spreadsheet = workbook.createSheet(" employeeDetails");

        // For creating font bold
        CellStyle boldStyleForCell = workbook.createCellStyle();
        Font font = workbook.createFont();// Create font
        font.setBold(true);// Make font bold
        boldStyleForCell.setFont(font);

        // Setting for excel cell to accept date of the format dd.MM.yyyy
        CreationHelper createHelper = workbook.getCreationHelper();
        CellStyle dateCellStyle = workbook.createCellStyle();
        dateCellStyle.setDataFormat(createHelper.createDataFormat().getFormat("dd.MM.yyyy"));

        // Setting column name at the top of excel file

        XSSFRow headerRow = spreadsheet.createRow(6);

        for (int i = 0; i < titles.length; i++) {
            Cell cell = headerRow.createCell(i);
            cell.setCellStyle(boldStyleForCell);
            cell.setCellValue(titles[i]);
        }

        // In excel row number 1 print info
        XSSFRow excelRow1 = spreadsheet.createRow(1);
        Cell cellForReportInfo = excelRow1.createCell(0);
        cellForReportInfo.setCellStyle(boldStyleForCell);
        cellForReportInfo.setCellValue("Employee Information");

        // In row number 3 print info
        XSSFRow excelRow3 = spreadsheet.createRow(3);
        excelRow3.createCell(0).setCellValue("Organization");
        excelRow3.createCell(1).setCellValue("Account");

        // In row number 4 print info
        XSSFRow excelRow4 = spreadsheet.createRow(4);
        excelRow4.createCell(0).setCellValue("Years");
        Cell cellForDatesRange = excelRow4.createCell(1);
        cellForDatesRange.setCellValue(startDateInString + " - " + endDateInString);

        //Loop through all the employee and print info in excel file
        int rowCount = 7;
        for (Employee employee : employeeList) {
            XSSFRow excelRow7 = spreadsheet.createRow(rowCount++);
            excelRow7 = spreadsheet.createRow(rowCount++);
            excelRow7.createCell(0).setCellValue(employee.getFirstname());
            excelRow7.createCell(1).setCellValue(employee.getLastname());
            excelRow7.createCell(2).setCellValue(employee.getEmployeeNumber());

            Cell cellForFulFillDate = excelRow7.createCell(3);
            cellForFulFillDate.setCellValue(employee.getFulfill_date());
            cellForFulFillDate.setCellStyle(dateCellStyle);

        }


        workbook.write(os);
        workbook.close();
        os.flush();

    } catch (Exception e) {
        e.printStackTrace();
    }

}

Я могуЗагрузите файл Excel из кода выше, но когда я пытаюсь открыть файл Excel, Excel выдает сообщение об ошибке ниже: Excel не может открыть файл 'employeeDetails.xlsx', поскольку формат файла или расширение файла недопустимы.Убедитесь, что файл не был поврежден и что расширение файла соответствует формату файла.

Что-то пропущено / неверно в моем коде?Может ли кто-нибудь помочь мне с этим?

ПРИМЕЧАНИЕ. У меня на компьютере установлено приложение Excel 2013, которое, я думаю, должно поддерживать файл xlsx.

На рисунке показана ошибкасообщение, которое выдает Excel, когда я пытаюсь открыть файл:

enter image description here

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

файл Excel с поврежденным текстом / данными

...