【问题标题】:Downloading xls file using java servlet and apache poi library使用 java servlet 和 apache poi 库下载 xls 文件
【发布时间】:2021-04-25 13:59:48
【问题描述】:

我正在尝试通过从 mysql 数据库表和 java servlet 和 apache poi 库中获取数据来下载 xls 文件。 我正在创建获取数据、创建 xls 文件并将其刷新到 ServletOutputStream 中。

但是文件正在以不同的格式下载,这不是正确的 xls 文件。 我发现代码是正确的,响应头是正确的。

SQL 查询工作正常。

怎么了?代码在这里...

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet firstSheet = workbook.createSheet("GSTR1");

java.sql.ResultSet rs = conx.createStatement().executeQuery(sql);
java.sql.ResultSetMetaData ds = rs.getMetaData();

                HSSFRow rowA1 = firstSheet.createRow(0);
                int c1 = 1;
                while(c1 < ds.getColumnCount())
                {
                    HSSFCell cellA = rowA1.createCell(c1);
                    Object obj = ds.getColumnLabel(c1);
                    if(obj != null)
                    {
                        String data = obj.toString();
                        cellA.setCellValue(data);
                    }
                    else
                    {
                        cellA.setCellValue(""); 
                    }
                    c1++;
                }
                
                int r = 1;
                while(rs.next())
                {
                    HSSFRow rowA = firstSheet.createRow(r);
                    int c = 1;
                    while(c < ds.getColumnCount())
                    {
                        HSSFCell cellA = rowA.createCell(c);
                        Object obj = rs.getString(c);
                        if(obj != null)
                        {
                            String data = obj.toString();
                            cellA.setCellValue(data);
                        }
                        else
                        {
                            cellA.setCellValue(""); 
                        }
                        c++;
                    }
                    r++;
                }

byte[] byteStream = workbook.getBytes();
response.setContentLength(byteStream.length);

servletOutputStream = response.getOutputStream();
servletOutputStream.write(byteStream);

response.addHeader("Content-disposition", "attachment;filename=file.xls");
response.setContentType("application/vnd.ms-excel");
servletOutputStream.flush();
servletOutputStream.close();

【问题讨论】:

    标签: java servlets download xls


    【解决方案1】:

    我有同样的问题。我的解决方法是使用org.apache.commons.io.IOUtils.write(content, response.getOutputStream());

    【讨论】:

      猜你喜欢
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      相关资源
      最近更新 更多