Я создал класс сервлетов 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, когда я пытаюсь открыть файл:
И если я все равно открою файл Excel с опцией «Ok» на картинке выше,Я получаю весь поврежденный текст.Пожалуйста, проверьте изображение ниже.
файл Excel с поврежденным текстом / данными