Apache POI – 使用XSSFWorkbok + servlet响应

我在我的Java应用程序中遇到问题,以启用下载XLSX文件。

下面的例子显示在这个链接: 创build一个Excel文件供用户使用Apache POI下载 ,我尝试了两种configuration下载/保存电子表格。

首先用.XLS文件:

response.setContentType("application/ms-excel"); response.setHeader("Content-Disposition", "attachment; filename=testxls.xls"); HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); HSSFRow row = sheet.createRow(0); HSSFCell cell = row.createCell(0); cell.setCellValue("Some text"); ByteArrayOutputStream outByteStream = new ByteArrayOutputStream(); wb.write(outByteStream); byte[] outArray = outByteStream.toByteArray(); OutputStream outStream = response.getOutputStream(); outStream.write(outArray); outStream.flush(); 

这工作。

然后我尝试了一个XLSX文件:

 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment; filename=testxls.xlsx"); XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet(); XSSFRow row = sheet.createRow(0); XSSFCell cell = row.createCell(0); cell.setCellValue("Some text"); ByteArrayOutputStream outByteStream = new ByteArrayOutputStream(); wb.write(outByteStream); byte[] outArray = outByteStream.toByteArray(); OutputStream outStream = response.getOutputStream(); outStream.write(outArray); outStream.flush(); 

当我尝试这个,我收到消息:“ Excel中发现'testxls.xlsx'中不可读的内容。你想恢复这个工作簿的内容?….

尽pipe这个消息,电子表格正常打开,但我真的想要删除此消息。

有任何想法吗?

使用这个JSP代码并成功生成excel文件。我已经通过数据库给了excel文件input,也可以给出手动input。

 <%HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); try { java.sql.Connection con; Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/custinfo","root","abc"); Statement st= con.createStatement(); out.println("hello world"); ResultSet rs=st.executeQuery("select name ,state ,balance,description from customerdata where customerid='"+Id+"'"); HSSFRow row = sheet.createRow((short)0); row.createCell((short)0).setCellValue("NAME"); row.createCell((short)1).setCellValue("STATE"); row.createCell((short)2).setCellValue("BALANCE"); row.createCell((short)3).setCellValue("DESCRIPTION"); while(rs.next()) { out.println("hello world data"); HSSFRow row1 = sheet.createRow((short)i); row1.createCell((short)0).setCellValue(rs.getString("name")); row1.createCell((short)1).setCellValue(rs.getString("state")); row1.createCell((short)2).setCellValue(rs.getString(3)); row1.createCell((short)3).setCellValue(rs.getString(4)); i=i+1; sheet.autoSizeColumn((short)1); } } catch(SQLException e) { out.println("SQLException caught: " +e.getMessage()); }%> // create a small spreadsheet <% %> <% ByteArrayOutputStream outByteStream = new ByteArrayOutputStream(); wb.write(outByteStream); byte [] outArray = outByteStream.toByteArray(); response.setContentType("application/ms-excel"); response.setContentLength(outArray.length); response.setHeader("Expires:", "0"); // eliminates browser caching response.setHeader("Content-Disposition", "attachment; filename=testxls.xls"); OutputStream outStream = response.getOutputStream(); outStream.write(outArray); outStream.flush(); %>