Java 从Apache Poi中导出的Excel中删除特殊字符和符号
我有这种导出excel文档的方法,但是当我打开excel时,我得到了这种文件,带有奇怪的字符和符号,没有格式;有人能指导我如何解决这个问题吗 这是我的方法,谢谢你的帮助;我还在做这个Java 从Apache Poi中导出的Excel中删除特殊字符和符号,java,excel,apache-poi,Java,Excel,Apache Poi,我有这种导出excel文档的方法,但是当我打开excel时,我得到了这种文件,带有奇怪的字符和符号,没有格式;有人能指导我如何解决这个问题吗 这是我的方法,谢谢你的帮助;我还在做这个 public void CrearExcel() throws SQLException { //Map param = new HashMap(); try { Connection conn = Conexion.getConnTest();
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文件可以接收文本内容,请尝试打印文本数据,而不是打印出二进制数据。如果这不能解决问题,它至少应该能够为您指明一个比打印二进制数据更好的方向。由于Excel文件可以接收文本内容,所以不要打印出二进制数据,而是尝试打印出文本数据。如果这不能解决问题,它至少应该能够为您指明一个比打印二进制数据更好的方向。为什么不直接从工作簿写入响应输出团队:
HSSFWorkbook hwb = new HSSFWorkbook();
...
OutputStream outStream = response.getOutputStream();
hwb.write(outputStream);
....
因此,请尝试跳过字节数组(outpu流)部分,因为这可能会导致您的问题
这是可能有用的
希望这能让您取消粘滞(或者至少在取消粘滞的道路上)。为什么不直接从工作簿写入响应outpustream:
HSSFWorkbook hwb = new HSSFWorkbook();
...
OutputStream outStream = response.getOutputStream();
hwb.write(outputStream);
....
因此,请尝试跳过字节数组(outpu流)部分,因为这可能会导致您的问题
这是可能有用的
希望这能让你摆脱困境(或者至少在摆脱困境的道路上)。如果你使用某些服务器,这是一个常见的错误。在写入响应之前,必须重置响应:
...
response.reset();
response.setHeader("Content-Disposition",
"attachment; filename=testxls.xls");
...
如果您使用的是某些服务器,这是一个常见的错误。在写入响应之前,必须重置响应:
...
response.reset();
response.setHeader("Content-Disposition",
"attachment; filename=testxls.xls");
...
您确定您的查询不会返回“奇怪”的结果吗?可能尝试打印查询返回的任何结果我确信我的查询不会返回任何特殊的符号或字符,我尝试更改为utf 8,但它不起作用。请帮助,我陷入了这个困境。你看到的不是奇怪的符号和字符,只是Excel错误解释的二进制数据。首先使用静态数据测试servlet(?或其他内容),然后添加数据库查询。我已经对其进行了测试,首先我将excel文件导出到我的计算机中的一个文件夹中,在我的计算机中excel文件是可以的,但在上面的示例中,它是二进制数据,未格式化。您确定您的查询不会返回“奇怪”的结果吗?可能尝试打印查询返回的任何结果我确信我的查询不会返回任何特殊的符号或字符,我尝试更改为utf 8,但它不起作用。请帮助,我陷入了这个困境。你看到的不是奇怪的符号和字符,只是Excel错误解释的二进制数据。首先用静态数据测试servlet(?或其他内容),然后添加数据库查询。我已经测试过了,首先我将excel文件导出到我计算机中的一个文件夹中,在我的计算机中excel文件正常,但是在上面,它是二进制数据,没有格式化对不起,我不明白你的答案,我该怎么做?对不起,我不明白你的答案,我该怎么做?我得到了相同的结果,请帮助,还有其他想法吗?即使是静态数据,我也会得到相同的结果,有什么方法吗?这听起来可能有点奇怪,但我想到了这一点:你能试着将工作簿的内容读入一个临时文本文件,然后从那里将其写入servlet响应(使用响应的编写器)吗?哦,让我看看我正在检查是否得到了相同的结果,请帮帮忙,还有其他想法吗?即使使用静态数据,我也会得到相同的结果,有什么方法吗?这听起来有点奇怪,但我想到了:你能试着把工作簿的内容读入一个临时文本文件,然后,从那里,把它写入servlet响应(使用响应的编写器)吗?哦,让我看看我正在检查它