报表批量导出excel

需求:多个皕杰报表展示信息导出到一个excel文件夹中。

解决方案:

在皕杰报表演示实例5.2提供了批量导出实例(BIOS Server\webapps\iface\report文件夹下的export.jsp和batchExport.jsp)

export.jsp:提供了3个皕杰报表访问信息、选择导出的excel版本和文件名称的实例。

export.jsp将导出的信息以规定的格式(rpts=Demo/分组报表/5分组汇总.brt|Demo/参数报表/时间参数.brt^params=year=1997&filetype=xls&filename=myexcel)传递到batchExport.jsp中。

batchExport.jsp:获取export.jsp传递过来的信息并处理。

〈%

         //rpts参数格式:a.brt|b.brt^params=p1=val1;p2=val2^vars=v1=val3;v2=val4

         //示例:batchExport.jsp?rpts=Demo/分组报表/5分组汇总.brt|Demo/参数报表/时间参数.brt^params=year=1997&filetype=xls&filename=myexcel

         //这个地方的编码与tomcat的server.xml及report_config.xml中的一致

         request.setCharacterEncoding("UTF-8");

         //获取访问皕杰报表的url(http://localhost:8080/report/ReportEmitter)

         String emitter = request.getScheme()  + "://" + request.getServerName() + ":" +  request.getServerPort() + request.getContextPath() +  "/ReportEmitter";

         //如果前端请求的url是经过javascript的encodeURIComponent函数编码的,获取rpts后应该再用java.net.URLDecoder.decode(rpts,"UTF-8")解码一次

         String rpts =  request.getParameter("rpts");//传递过来的报表信息

         String fileName =  request.getParameter("filename");//导出文件名

         String fileType =  request.getParameter("filetype");//导出格式(xls)

         String sessionId =  request.getSession().getId();

//将多个报表信息根据“|”拆分(Demo/分组报表/5分组汇总.brt|Demo/参数报表/时间参数.brt^params=year=1997)

         String[] rptArr = rpts.split("\\|");

// 创建一个Excel文件

                  HSSFWorkbook  wb = new HSSFWorkbook();

                  for  (int i = 0; i < rptArr.length; i++) {

            //拆分报表信息里的报表路径和参数信息和变量信息

                           String[] rptPart =  rptArr[i].split("\\^");

                           try {

                                    //这个地方的编码与tomcat的server.xml及report_config.xml中的一致

                                    String  urlencode = java.net.URLEncoder.encode(rptPart[0],"UTF-8");

                //遍历参数或变量数组并url转码

                                    for(int  j=1;j

                                             if("vars".equals(rptPart[1].substring(0,4).toLowerCase())){

                                                      urlencode=  urlencode+"&vars="+java.net.URLEncoder.encode(rptPart[j].substring(5),"UTF-8");

                                             }else  if("params".equals(rptPart[1].substring(0,6).toLowerCase())){

                                                      urlencode=  urlencode+"¶ms="+java.net.URLEncoder.encode(rptPart[j].substring(7),"UTF-8");

                                             }

                                    }

                //创建一个新的url(http://localhost:8080/report/ReportEmitter?rpt=Demo/参数报表/时间参数.brt¶ms=year=1997)

                                    URL  url = new URL(emitter + "?rpt=" + urlencode +  "&emitter=toobj");

                //此处的urlConnection对象实际上是根据URL的 请求协议(此处是http)生成的URLConnection类的子类HttpURLConnection,故此处最好将其转化为HttpURLConnection类型的对象

                                    urlc  = (HttpURLConnection) url.openConnection();

                                    // 设定请求的方法为"POST",默认是GET

urlc.setRequestMethod("GET");

//设置这个url的cookie

                                    urlc.setRequestProperty("Cookie",  "JSESSIONID="+sessionId);

                //设定传送的内容类型是流

                                    urlc.setRequestProperty("Content-type",  "application/octet-stream");

                     //获取url的生成的输入流

                                    InputStream  in = urlc.getInputStream();

                //从已经保存的ReportBean数据输入流创建一个报表运算结果

                                    ReportBean  rptBean = new ReportBean(in);

                //使用传入POI文档对象,生成Excel

                                    rptBean.toExcel(wb);

//设置这个excel的sheet页的名称

                                    wb.setSheetName(i,  rptBean.getReportName());

                                    in.close();

                           } catch (Exception e) {

                                    e.printStackTrace();

                           }

                  }

        //输出excel流到页面

                  response.resetBuffer();

       //设置excel名称

                  response.setHeader("Content-Disposition",  "attachment; filename=" + new  String(fileName.getBytes("utf-8"), "ISO8859-1") +  ".xls");

        //设置excel从页面下载

                  response.setContentType("application/x-msdownload;charset=utf-8");

//创建输出流

                  ServletOutputStream  outStream = response.getOutputStream();

        //excel写入到输出流

                  wb.write(outStream);

                  outStream.flush();

                  outStream.close();

                  outStream  = null;

                  response.flushBuffer();

                  out.clear();

                  out  = pageContext.pushBody();                        

%>

你可能感兴趣的:(报表批量导出excel)