报表知识库
我要提问

基于API的报表样式批量修改解决方案

一、需求背景


集智数据平台Web自定义报表功能中提供了样式管理功能,可以灵活的进行全局样式或私有样式的管理,通过全局样式管理,可以实现对报表的批量样式修改功能。有关全局样式管理功能的介绍和使用可参考文章《使用样式管理实现批量报表的快速换肤》。


那么,如果用户是在自己的已有系统中集成润乾报表,而未使用集智数据平台,用户需要对报表进行样式批量修改,有什么样的解决方案呢?


这里,我们为大家介绍如何通过API来实现报表样式批量修改功能。


 


二、解决方案


润乾报表在系统运算过程中以对象的形态存在,报表的每一个单元格都有其各种属性,通过对各种属性的设置,我们可以改变单元格的样式,包括格线、背景色、前景色、字体等。


我们可以通过java方法批量读取报表文件,然后遍历全部报表对象的单元格,将单元格属性信息回设到报表对象中,达到批量换肤的目的。


以下是通过API实现报表样式批量修改解决方案的示例步骤与代码:


 1、通过api预定义报表样式,例如:ChangeReportStyle.java


package common.reader.raq;


import com.runqian.report4.model.NormalCell;


import com.runqian.report4.model.ReportDefine;


import com.runqian.report4.model.RowCell;


import com.runqian.report4.usermodel.INormalCell;


import com.runqian.report4.util.ReportUtils;


 


public class ChangeReportStyle {


         。。。。。。//此处省略


    /**


     * 根据行性质,设置行的属性,根据实际需求进行修改。


     * @param row


     */


      public void setRowProperty(RowCell row) {


             byte rowType = row.getRowType();


             switch (rowType) {    


             case (RowCell.TYPE_GROUP_HEADER): {


                    optimizeRow(row, true);


             }


                    break;


             case (RowCell.TYPE_TITLE_HEADER):


                    optimizeRow(row, true);


                    break;


             case (RowCell.TYPE_TABLE_HEADER):


                    optimizeRow(row, true);


                    break;


             case (RowCell.TYPE_PAGE_HEADER):


                    optimizeRow(row, true);


                    break;


             case (RowCell.TYPE_NORMAL):


                    optimizeRow(row, false);


                    break;


             case (RowCell.TYPE_TABLE_FOOTER):


                    optimizeRow(row, false);


                    break;


             case (RowCell.TYPE_TITLE_FOOTER):


                    optimizeRow(row, false);


                    break;


             case (RowCell.TYPE_PAGE_FOOTER):


                    optimizeRow(row, false);


             }


      }


 


      /**


       * 此方法,请根据实际需要进行调整


       * @param row


       * @param isHeader


       */


      public void optimizeRow(RowCell row, boolean isHeader) {


             int r = currentRow;


             short c = 1;


             NormalCell cell = null;


             boolean isParam = testFile.indexOf(“_arg”)>1;


             for (; c <= cols; c++) {


                    cell = (NormalCell) rd.getCell(r, c);


                    try {


                           if (isHeader) {


                                  cell.setBackColor(-1445385);// background color


                                  cell.setForeColor(-14655348);// foreground color


                                  cell.setLBColor(-2235674);// left


                                  if(!isParam)cell.setLBStyle(INormalCell.LINE_SOLID);


                                  cell.setRBColor(-2235674);// right


                                  if(!isParam)cell.setRBStyle(INormalCell.LINE_SOLID);


                                  cell.setTBColor(-2235674);// top


                                  if(!isParam)cell.setTBStyle(INormalCell.LINE_SOLID);


                                  cell.setBBColor(-2235674);// bottom


                                  if(!isParam)cell.setBBStyle(INormalCell.LINE_SOLID);


                                  cell.setBold(true);// font’s bold property


                                  cell.setHAlign(INormalCell.HALIGN_CENTER);// header


                                                                            //horizon align


                                     } else {


                                  cell.setBackColor(-1);// background color


                                  cell.setForeColor(-14655348);// foreground color


                                  cell.setLBColor(-2235674);// left


                                  if(!isParam)cell.setLBStyle(INormalCell.LINE_SOLID);


                                  cell.setRBColor(-2235674);// right


                                  if(!isParam)cell.setRBStyle(INormalCell.LINE_SOLID);


                                  cell.setTBColor(-2235674);// top


                                  if(!isParam)cell.setTBStyle(INormalCell.LINE_SOLID);


                                  cell.setBBColor(-2235674);// bottom


                                  if(!isParam)cell.setBBStyle(INormalCell.LINE_SOLID);


                                  cell.setBold(false);// font’s bold property


                           }


                           rd.setCell(r, c, cell);


                            } catch (Exception e) {


                           e.printStackTrace();


                    }


             }


      }


}


 



 


2、操作流程


首先运行程序,选择报表模板所在的路径,如图所示:



 


选择读取raq模板,将读取directory path的全部模板,如下图所示:



 



选择优化颜色按钮,实现对模板的批量样式修改。


 


三、结语


通过API的方式可以为用户实现报表样式的批量统一修改,而不用再一张张地对每个报表单独进行设置。但这一解决方案需要用户深度掌握润乾报表的API,并且对于批量修改的报表样式局限于共性的修改,比如:全局字体、全局字体颜色、全局背景色、表头样式、数据区样式等。


 


关于报表样式批量修改,除了开头提到的集智数据平台全局样式管理功能,也还有其他可供参考方法,例如通过CSS的报表样式控制,读者可参见文章:


《报表样式的CSS控制方法》