I'm not sure what the problem is with your code, but I do have JasperReports exporting to Excel in a very similar way. I've attached my code for you to reference. One difference that I saw, was your use of the ByteArrayOutputStream - where I use the FileOutputStream. Please let us know if you get this working. Code:JRXlsExporter excelExporter = new JRXlsExporter();OutputStream ouputStream = new FileOutputStream(new File(destFile));ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();excelExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);excelExporter.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, byteArrayOutputStream);excelExporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);excelExporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);excelExporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);excelExporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);excelExporter.setParameter(JRXlsExporterParameter.CHARACTER_ENCODING, "UTF-8");excelExporter.exportReport();ouputStream.write(byteArrayOutputStream.toByteArray());ouputStream.flush();ouputStream.close();