有时我们在开发过程中会遇到表格里有合并单元格的需求。
今天以View UI (iview)组件库为例。

1. 打开iview官网-table会发现有合并单元格示例:

2. 但是在实际项目中,无法做到像上边代码那样通过 rowIndexcolumnIndex 在前端将合并的单元格写死,而是需要根据后台返回给前端的数据进行逻辑判断,决定合并哪些单元格。

(1)比如现在有一个需求是表格的第一列“类别”中,如果有相同类别名字的进行单元格合并

<template><Table :columns="columns1" :data="data1" :span-method="handleSpan"></Table>
</template>
<script>
export default {data () {return {columns1: [{title: '类别',key: 'name'},{title: '指标内容',key: 'date'}],data1: [{name: 'John Brown',date: 18,},{name: 'John Brown',date: 18,},{name: 'John Brown1',date: 181,},{name: 'John Brown2',date: 182,},{name: 'John Brown2',date: 182,},{name: 'John Brown2',date: 182,},]}
},
methods: {handleSpan ({ row, column, rowIndex, columnIndex }) {}
}
}
</script>

页面如下:

(2)可知:第1、2行name值相同、第4、5、6行name值相同,下面研究如何合并第1行第1列、第2行第1列以及第4行第1列、第5行第1列、第6行第1列。

这里我们将data中的 data1改为 resData,而将 data1改为空数组,用 resData 模拟后台返回前端的数据.

注意:在合并行时,需要合并的数据必须相临,否则无法合并。这里我们直接将 resData 中需要合并的数据设为相临,即第1、2条以及第4、第5、第6条,在实际项目中这部分可以通过前端或者后端来操作这些数据,排序,使之相邻。

修改后的代码如下所示:

<template><Table :columns="columns1" :data="data1" :span-method="handleSpan"></Table>
</template>
<script>
export default {data () {return {columns1: [{title: '类别',key: 'name'},{title: '指标内容',key: 'date'}],resData: [{name: 'John Brown',date: 18,},{name: 'John Brown',date: 18,},{name: 'John Brown1',date: 181,},{name: 'John Brown2',date: 182,},{name: 'John Brown2',date: 182,},{name: 'John Brown2',date: 182,},],data1: []}
},
methods: {handleSpan ({ row, column, rowIndex, columnIndex }) {}
}
}
</script>

(3)然后对 resData 中的数据进行处理,从而实现 name 值相同的行进行合并。

代码如下(具体说明已在代码块中添加注释):

<template><Table :columns="columns1" :data="data1" :span-method="handleSpan"></Table>
</template>
<script>
export default {data () {return {columns1: [{title: '类别',key: 'name'},{title: '指标内容',key: 'date'}],resData: [{name: 'John Brown',date: 18,},{name: 'John Brown',date: 18,},{name: 'John Brown1',date: 181,},{name: 'John Brown2',date: 182,},{name: 'John Brown2',date: 182,},{name: 'John Brown2',date: 182,},],data1: []}
},
methods: {handleSpan ({ row, column, rowIndex, columnIndex }) {//合并第1列,这里columnIndex==0,根据需求的不同,需要前端写死if(columnIndex == 0) {//计算合并的行数列数let x = row.mergeColumn == 0 ? 0:row.mergeColumnlet y = row.mergeColumn == 0 ? 0:1return [x, y]}},assembleData(data){let names = []//筛选出不重复的 name值,将其放到 names数组中data.forEach(e => {if(!names.includes(e.name)){names.push(e.name)}})let nameNums = []//将names数组中的 name值设置默认合并0个单元格,放到 nameNums中names.forEach(e => {nameNums.push({name:e,num:0})})//计算每种 name值所在行需要合并的单元格数data.forEach(e => {nameNums.forEach(n => {if(e.name == n.name){n.num++}})})//将计算后的合并单元格数整合到 data中data.forEach(e => {nameNums.forEach(n => {if(e.name == n.name){if(names.includes(e.name)){e.mergeColumn = n.num//删除已经设置过的值(防止被合并的单元格进到这个 if 语句中)names.splice(names.indexOf(n.name),1)} else {//被合并的单元格设置为 0e.mergeColumn = 0}}
})
})//将整理后的数据交给表格渲染this.data1 = data}
},mounted(){//这里 this.resData即为后台返回的数据this.assembleData(this.resData)}}
</script>

运行结果如下:

到这里,也就实现了我们想要的效果。

View UI (iview)表格合并单元格(行/列合并)相关推荐

  1. SAP ALV合并单元格示例(合并单元格为表头)

    前言 实现参考Enno Wulff的文章(德文):Zellen verbinden 在原有基础上新增了部分功能(支持输入合并单元格的显示值) 效果 代码 主程序 *&------------- ...

  2. php 合并重复数据合并单元格,通过js合并表格重复出现的数据

    js必须等表格加载完成后调用. 效果如图: js代码: function uniteTable(tableId,colLength) { //colLength-- 需要合并单元格的列1开始 var ...

  3. html表格里面怎么合并单元格的快捷键,合并单元格快捷键,教您excel怎么合并单元格快捷键...

    快捷键是大家办公常用的操作技巧,我们办公中经常会制作一些表格,为了让表格达到最终想要的效果,时常需要将Excel中多个单元格合并成一个单元格.当然,操作方法也有多种,下面,小编给大伙带来了excel合 ...

  4. html表格里面怎么合并单元格的快捷键,合并单元格快捷键ctrl加什么?

    01 先选择要合并的单元格,按CTRL+1键,再用"←"及"→"方向键移动到第二个选项卡,再按ALT+M键,再按确定,完成.Excel是Microsoft为使用 ...

  5. 个人永久性免费-Excel催化剂功能第52波-相同内容批量合并单元格,取消合并单元格并填充内容...

    在高级Excel用户群体中无比痛恨的合并单元格,在现实的表格中却阴魂不散的纠缠不断.今天Excel催化剂也来成为"帮凶",制造更多的合并单元格.虽然开发出此功能,请使用过程中务必要 ...

  6. 动态合并单元格行和列方法封装 ~~~起手可用

    在项目中遇到一个需求合并单元格行跟列同时合并,抽个方法做个记录,可以直接引入min.js中直接使用 /*** * @param {*} table vue对象, Element-ui Table 插件 ...

  7. html统计表合并单元格的快捷键,合并单元格快捷键,小编教你excel怎么合并单元格快捷键...

    合并单元格是我们经常要做的工作,如果有合并单元格的快捷键正是我们想要的,很遗憾,微软并没有直接提供这样一个快捷键,在excel表的运用中,难免会碰到希望将两个单元格合并的时候,那么怎么做呢?下面,小编 ...

  8. 【合并单元格】纵向合并单元格之前对数组处理【针对饿了么element的table的span-method合并行或列的计算方法】

    <template><el-table :span-method="spanMethod"><el-table-column label=" ...

  9. 在DataGrid中合并单元格行

    最近在做项目的时候经常遇到要合并单元格的情况,发现这个东西.net中并没有现成的方法,研究了一下,总结了两种方法. 这个主要都是行合并的,有以下两种情况 1.多行合并为一行,其中将某个或某几个单元格的 ...

  10. el-table合并单元格-行合并

    合并单元格,如果id列值一致,则合并 原理 1.getSpanArr(data)方法 data就是我们从后台拿到的数据,通常是一个数组: 2.spanArr是一个空的数组,用于存放每一行记录的合并数: ...

最新文章

  1. 在用户控件中弹出消息框的方法
  2. java i 什么时候变_Java中i++与++i的区别(效率分析)
  3. Keil5 编译生成bin二进制文件的设置方法
  4. python 电脑文件变动提醒_Python整理文件方法,效率提升100倍-docx是什么文件
  5. 200 个工具分析机器学习十年:前途未卜、工程师是核心!
  6. riot.js教程【二】组件撰写准则、预处理器、标签样式和装配方法
  7. Vue之安装Google开发插件
  8. 如何使用SQL Server游标
  9. hdu1059Dividing
  10. Spring与MyBatis整合源码分析
  11. 小菜编程成长记(十一 无熟人难办事?——聊设计模式迪米特法则)
  12. swagger分页查询报错500
  13. 锆石FPGA---verlog语法篇
  14. 量子纠缠的超距作用,超光速是假象
  15. modelsim使用protect加密verilog代码
  16. Android自定义控件增加xml标签属性、取值等
  17. ArcGIS10联网无法启动问题解决
  18. 【三维重建学习之路01】点云ply文件的读写、修改
  19. Android Quic协议资料
  20. 华为 网络技术工程师 2018秋招 于南京华为研究所面试经历

热门文章

  1. Oracle10g ora12170,ORA-3136、TNS-12535 12170 12606
  2. QT半透明图片叠加显示
  3. Linux c在图片添加时间水印,如何在照片上添加时间水印
  4. 关于支付宝的支付流程
  5. 北京“快速AI体温检测”应对返工潮;盖茨基金出资1亿美元抗击新冠病毒;腾讯再设2亿元资金池抗击疫情...
  6. 关于Parser的知识点总结
  7. Canal Java 入门与使用
  8. 十大城市加速崛起,数字化创新驱动特点明显
  9. Whitelabel Error Page
  10. 2020世界人工智能大会 -- 落地AI,赋能未来