润乾报表 API 后台导出报表组到 excel

 

最近遇到有客户需要实现后台运算导出报表组到 excel 的需求。

之前做过单个报表后台导出到 excel 的示例,思路是一致的,代码略有不同。

需要将报表组的各个子报表项计算并导出到同一个 excel 的不同 sheet 页中。

示例使用的是内建数据集的报表文件,所以注释掉了数据库连接池的配置和参数部分

核心代码:

/ /读取报表模板  
Context cxt = new Context();  //构建报表引擎计算环境  
cxt.setMainDir("F:\\\Program Files\\\raqsoftdql614\\\report5\\\web\\\webapps\\\demo\\\WEB-INF\\\reportFiles");//设置主路径,如果有相对路径的读取配置,那么必配此项  
               String reportGroup1 = "F:\\\Program Files\\\raqsoftdql614\\\report5\\\web\\\webapps\\\demo\\\WEB-INF\\\reportFiles\\\自定义.rpg";  //读取报表文件  
                //设置授权文件  
         File flic = new File("E:/授权文件/新授权/润乾报表内部**[测试](http://lib.csdn.net/base/softwaretest)**版.lic");  
         FileInputStream lis = new FileInputStream(flic);  
         Sequence.readLicense( Sequence.P_RPT, lis);  
  
         ReportGroup  rg = ReportUtils.readReportGroup(reportGroup1);  
  
//设置数据库连接池  
         /*Connection con = null;  
         try{  
         Driver driver = (Driver) Class.forName("org.hsqldb.jdbcDriver").newInstance();  
         DriverManager.registerDriver(driver);  
         con= DriverManager.getConnection("jdbc:hsqldb:hsql://127.0.0.1/dqldemo","sa","");  
         }catch (Exception e){  
         e.printStackTrace(); }           
         cxt.setDefDataSourceName("demo");  
          cxt.setConnection("demo", con);  
          DataSourceConfig dsoc = new DataSourceConfig(DBTypes.getDBType("hsql"), true, "GBK", "GBK", false);           
          cxt.setDataSourceConfig("demo", dsoc);  
          //设置参数  
          ParamMetaData pmd = rd.getParamMetaData(); //从报表定义中取得参数元对象ParamMetaData  
          String paramOrMocrName = "";  
          if(pmd != null){  
          paramOrMocrName = pmd.getParam(0).getParamName(); //获取参数名  
          cxt.setParamValue(paramOrMocrName,"77777"); //设参数值           
      }  
         */  
  
       //运算报表  
         GroupEngine groupEngine = new GroupEngine(rg,cxt);  
       //获取子报表数量  
         int num=rg.getItemCount();  
         //新建excelReport对象  
         ExcelReport er=new ExcelReport();  
         //循环分别计算子报表  
         for(int i=0;i<num;i++){  
         IReport r = groupEngine.getReport(i);  
         //生成子表的excel对象  
         er.export( "a"+i,r);  
         }  
         er.saveTo("F:/moreSheetInExcel.xls"); //输出到指定文件