在Apache Poi中从我导出的Excel中删除特殊字符和符号

我有用于导出excel文档的这种方法,但是当我打开excel时,我得到这种带有怪异字符和符号的文件,没有格式化; 有人可以指导我如何解决这个问题?

在这里输入图像说明

这是我的方法,感谢您的帮助; 我仍在为此工作。

public void CrearExcel() throws SQLException { //Map param = new HashMap(); try { Connection conn = Conexion.getConnTest(); PreparedStatement ps = null; ResultSet rs = null; String sql = "SELECT NUM_FICHA, ASPIRANTE.AP_PATERNO, ASPIRANTE.AP_MATERNO, ASPIRANTE.NOMBRE FROM REFERENCIA INNER JOIN ASPIRANTE ON REFERENCIA.FK_ASPIRANTE_ID_ASPIRANTE = ASPIRANTE.ID_USUARIO WHERE NUM_FICHA IS NOT NULL"; ps = conn.prepareStatement(sql); rs = ps.executeQuery(); HSSFWorkbook hwb = new HSSFWorkbook(); HSSFSheet sheet = hwb.createSheet("new sheet"); Row rowhead = sheet.createRow(0); rowhead.createCell(0).setCellValue("NUMFICHA"); rowhead.createCell(1).setCellValue("APELLIDO PATERNO"); rowhead.createCell(2).setCellValue("APELLIDO MATERNO"); rowhead.createCell(3).setCellValue("NOMBRE"); rowhead.createCell(4).setCellValue("EXAMEN1"); rowhead.createCell(5).setCellValue("EXAMEN2"); int index = 1; while (rs.next()) { Row row = sheet.createRow(index); row.createCell(0).setCellValue(rs.getInt(1)); row.createCell(1).setCellValue(rs.getString(2)); row.createCell(2).setCellValue(rs.getString(3)); row.createCell(3).setCellValue(rs.getString(4)); row.createCell(4).setCellValue(""); row.createCell(5).setCellValue(""); index++; } ByteArrayOutputStream outByteStream = new ByteArrayOutputStream(); hwb.write(outByteStream); byte[] outArray = outByteStream.toByteArray(); response.setHeader("Content-Disposition", "attachment; filename=testxls.xls"); response.setContentType("application/vnd.ms-excel"); response.flushBuffer(); OutputStream outStream = response.getOutputStream(); outStream.write(outArray); outStream.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 

由于Excel文件可以接收文本内容,而不是打印出二进制数据,所以请尝试打印出文本数据。 如果这不能解决问题,至less应该能够指出你比打印二进制数据更好的方向。

你为什么不直接从工作簿写出回应outpustream:

 HSSFWorkbook hwb = new HSSFWorkbook(); ... OutputStream outStream = response.getOutputStream(); hwb.write(outputStream); .... 

所以,尝试跳过字节数组(输出stream)部分,因为这可能会导致您的问题。

以下是一些可能有所帮助的更多信息 。

希望这可以让你脱钩(或至less在脱钩的道路上)。

如果您使用某些服务器,这是一个常见的错误。 写入之前必须重置回应:

 ... response.reset(); response.setHeader("Content-Disposition", "attachment; filename=testxls.xls"); ...