-
tangmq 数据达人Lv4
发表于2019-4-16 13:29
楼主
非工整的交叉浮动表
要了解非工整的交叉浮动标,就首先需要了解下表样工整的常规交叉浮动。
常规交叉浮动表,一个向右的浮动+一个向下浮动,指标在两个浮动表元的交叉区域,如下图:
常规交叉浮动,结果是m*n的完整的矩形结果,如下图:
非工整的交叉浮动表,如下图所示,每列数据出来的数据行数不同,每个数据行顺序也不同
这样结构的结果表如何设计,如下图所示就是该表的编辑表样,横向浮动需要包含纵向浮动
对于上述所生成的结果有两个不是很完美的地方:
1、 每组纵向都有合计行,由于数据行数不同,合计行所在的位置错落不一,如何让合计行都在最下面一行呢?
2、 浮动结果没有覆盖到的单元格,样式是空白的,如上数据行有背景颜色,但是空白单元格不带任何表元样式,如何让空白行表元样式与数据行保持一致?
Gogogo,牛掰的脚本分享给大家:
- def gridName = "GRID1"; // 表格代号
- rptNew = rpt.getGrid(gridName);
- rowCount = rptNew.getRowCount();
- colCount = rptNew.getColCount();
- for (c in 0..<colCount) {
- for (r in 0..<rowCount - 1) {
- curCell = rptNew.getCell(r, c);
- nextCell = rptNew.getCell(r + 1, c);
- curCellDisplayValue = curCell.getDisplayValue();
- nextCellDisplayValue = nextCell.getDisplayValue();
- if (nextCellDisplayValue == null && curCellDisplayValue != null) { // 当前表元值不为空,下一行的表元值为空
- lastCell = rptNew.getCell(rowCount - 1, c);
- preCell = rptNew.getCell(r - 1, c);
- bkcolor = preCell.cbo().getBgColor();
- lastCell.copyAll(curCell);
- curCell.copyAll(nextCell);
- for (row in r..< rowCount - 1) {
- tempCell = rptNew.getCell(row, c);
- tempCell.copyStyle(preCell);
- cellDrawBuilder = tempCell.cbo();
- cellDrawBuilder.setBgColor(bkcolor);
- // 修改后的样式必须应用到所属表元
- cellDrawBuilder.apply();
- }
- break;
- }
- }
- }
效果图: