搜索
查看: 2090|回复: 2

[算法] ReportX报表控件显示数据库分类数据时 合并单元格递归算法

[复制链接]

75

主题

850

帖子

4990

积分

六级会员

The only one

Rank: 9Rank: 9Rank: 9

积分
4990
发表于 2014-10-1 23:57:25 | 显示全部楼层 |阅读模式
QQ截图20141001234427.png

递归算法如下:

  1. var isMerge;
  2. isMerge=function(tab,row,col){
  3.         if(col<=0){
  4.                 return false;
  5.         }
  6.         var curRowValue;
  7.         var nextRowValue;
  8.         curRowValue=tab[row][col];
  9.         var nextRowTab=tab[row+1];
  10.         if(!nextRowTab){
  11.                 return true;
  12.         }
  13.        
  14.         nextRowValue=nextRowTab[col];
  15.         if(curRowValue!=nextRowValue){
  16.                 return true;
  17.         }
  18.         if(curRowValue=nextRowValue){
  19.                 return isMerge(tab,row,col-1);       
  20.         }
  21. }
复制代码


完整示例;

  1. import win.ui;
  2. /*DSG{{*/
  3. mainForm = win.form( bottom=400;right=600;text="ReportX 测试" )
  4. mainForm.add(  )
  5. /*}}*/

  6. import com.lite;
  7. var ReportX = com.lite("/ReportX.ocx")
  8. var rep = ReportX.createEmbed(mainForm,"{A5DA6E97-1D4C-4708-B705-84A45716B4DD}")
  9. repObject = rep._object;
  10. repObject.RowCount=15;
  11. repObject.ColCount=5;

  12. var testTab={
  13.         {"客户1";"工地1";"等级1";"产品1"};
  14.         {"客户1";"工地1";"等级1";"产品2"};
  15.         {"客户1";"工地2";"等级1";"产品2"};
  16.         {"客户1";"工地2";"等级1";"产品2"};
  17.         {"客户1";"工地2";"等级1";"产品3"};
  18.         {"客户2";"工地2";"等级1";"产品1"};
  19.         {"客户2";"工地2";"等级2";"产品2"};
  20.         {"客户2";"工地2";"等级2";"产品3"};
  21.         {"客户2";"工地3";"等级1";"产品3"};
  22.         {"客户2";"工地3";"等级1";"产品3"};
  23.         {"客户2";"工地3";"等级1";"产品3"};
  24.         {"客户3";"工地3";"等级1";"产品4"};       
  25. };

  26. //递归函数 判断指定行指定列是否需要合并
  27. var isMerge;
  28. isMerge=function(tab,row,col){
  29.         if(col<=0){
  30.                 return false;
  31.         }
  32.         var curRowValue;
  33.         var nextRowValue;
  34.         curRowValue=tab[row][col];
  35.         var nextRowTab=tab[row+1];
  36.         if(!nextRowTab){
  37.                 return true;
  38.         }
  39.        
  40.         nextRowValue=nextRowTab[col];
  41.         if(curRowValue!=nextRowValue){
  42.                 return true;
  43.         }
  44.         if(curRowValue=nextRowValue){
  45.                 return isMerge(tab,row,col-1);       
  46.         }
  47. }

  48. //合并指定列单元格
  49. var mergeColCell=function(col){
  50.         var curRow=0;
  51.         var startRow=0;
  52.         var endRow=0;
  53.        
  54.         for(i=1;#testTab;1){
  55.                 curRow++;
  56.                 if(!startRow){
  57.                         startRow=curRow;
  58.                 }
  59.                 var merge=isMerge(testTab,i,col);
  60.                 if(merge){
  61.                         endRow=curRow;
  62.                         repObject.MergeCell(col,startRow,col,endRow);
  63.                         startRow=curRow+1;
  64.                 }
  65.         }       
  66. }

  67. for(i=1;#testTab;1){
  68.         for(j=1;#testTab[i];1){
  69.                 repObject.SetCellValue(j,i,testTab[i][j]);       
  70.         }
  71. }

  72. for(i=1;#testTab[1];1){
  73.         mergeColCell(i)
  74. }

  75. for(i=1;#testTab;1){
  76.         for(j=1;repObject.ColCount-1;1){
  77.                 repObject.SetCellBorder(j,i,0,1,0);       
  78.         }
  79. }

  80. mainForm.show()
  81. win.loopMessage();

复制代码
小时候,幸福是一件东西,拥有就是幸福; 长大了,幸福是一个目标,达到就是幸福; 成熟后,发现幸福原来是一种心态,领悟就是幸福.
回复

使用道具 举报

0

主题

9

帖子

213

积分

二级会员

Rank: 3Rank: 3

积分
213
QQ
发表于 2014-10-2 17:14:54 | 显示全部楼层

正好在解决这个问题,就看到了楼主的帖子,非常感谢

正好在解决这个问题,就看到了楼主的帖子,非常感谢
回复

使用道具 举报

16

主题

138

帖子

932

积分

三级会员

Rank: 4

积分
932
发表于 2014-10-7 17:43:11 | 显示全部楼层

look太牛了,赞一个

look太牛了,赞一个
原创网http://fanal.cn谢谢支持
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-4-23 00:27 , Processed in 0.062502 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表