编写 POI 工作簿以输出流会生成奇怪的值



我的目标是创建一个Excel文件供用户通过Apache poi下载。

我的servlet中有这段代码:

protected void doGet(HttpServletRequest request, 
              HttpServletResponse response) throws ServletException, IOException 
      {
            // create a workbook , worksheet
            Workbook wb = new HSSFWorkbook();
            Sheet sheet = wb.createSheet("MySheet");
            CreationHelper createHelper = wb.getCreationHelper();
            // Create a row and put some cells in it. Rows are 0 based.
            Row row = sheet.createRow((short)0);
            Cell cell = row.createCell(0);
            cell.setCellValue(1);
            row.createCell(1).setCellValue(1.2);
            row.createCell(2).setCellValue( createHelper.createRichTextString("This is a string") );
            row.createCell(3).setCellValue(true);
            //write workbook to outputstream
            ServletOutputStream out = response.getOutputStream();
            wb.write(out);
            out.flush();
            out.close();
            //offer the user the option of opening or downloading the resulting Excel file
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-Disposition", "attachment; filename=MyExcel.xls");

问题是我得到了这些奇怪的值:

'......MySheetŒ®üÿ » ÌÁ w dü©ñÒMbP?*+'€%ÿÁƒ"¡"d,,à?à?

有什么建议吗?

发现了问题所在。 必须先设置 HttpServletResponse ,然后再进行任何其他操作

//offer the user the option of opening or downloading the resulting Excel file
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-Disposition", "attachment; filename=MyExcel.xls");

您需要为每个单元格设置单元格类型,您可以使用:

cell.setCellType(Cell.CELL_TYPE_STRING );

在此处查看 api 以获取更多单元格类型。

或者,您也可以使用 DataFormatter。

最新更新