报表知识库
我要提问

V4报表样式批量修改解决方案

 

V4报表样式批量修改

 

需求背景 

 

在润乾v5中提供了样式管理功能,可以灵活的进行全局样式或私有样式的管理,通过v5的全局样式管理,可以实现对现有报表的批量样式修改功能。对于v4,润乾并没有提供相应的全局样式管理功能,对于用户需要进行样式批量修改的功能,在v4中我们可以间接的通过润乾的api实现该功能。

 

解决方案 

      

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

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

 

实现原理

 

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,对于批量修改的报表局限于共性的修改,比如:全局字体、全局字体颜色、全局背景色、表头样式、数据区样式等的修改比较方便。

 

标签: