生成handsontable的行合并配置, 我的项目中没有过多需求, 所以我写的列是固定的, 以及变量名有不规范之处, 请自行修改扩展
方法:
function mergeCells(startRow, data) {
let xian = (xiang = cun = { value: null });
const result = [];
for (let i = 0; i < data.length; i += 1) {
const arr = data[i];
const 县 = arr[0]; // 县列
const 乡 = arr[1]; // 乡列
const 村 = arr[2]; // 村列
// 同时计算
if (xian.value === 县) {
xian.rowspan += 1;
} else {
xian = {
row: startRow + i,
col: 0,
rowspan: 1,
colspan: 1,
value: 县,
};
result.push(xian);
}
if (xiang.value === 乡) {
xiang.rowspan += 1;
} else {
xiang = {
row: startRow + i,
col: 1,
rowspan: 1,
colspan: 1,
value: 乡,
};
result.push(xiang);
}
if (cun.value === 村) {
cun.rowspan += 1;
} else {
cun = {
row: startRow + i,
col: 2,
rowspan: 1,
colspan: 1,
value: 村,
};
result.push(cun);
}
}
return result.filter(item => item.rowspan !== 1);
}
示例代码
const data = [
['县1', '乡1', '村1', '组1'],
['县1', '乡1', '村1', '组2'],
['县1', '乡1', '村1', '组3'],
['县1', '乡1', '村1', '合计'],
['县1', '乡1', '村2', '组3'],
['县1', '乡1', '村2', '合计'],
['县1', '乡1', '合计', ''],
['县1', '乡2', '村3', '组4'],
['县1', '乡2', '村3', '组4'],
['县1', '乡2', '村3', '合计'],
['县1', '乡2', '合计', ''],
['县1', '合计', '', ''],
];
mergeCells(4, data)
// 返回结果
[ { row: 4, col: 0, rowspan: 12, colspan: 1, value: '县1' },
{ row: 4, col: 1, rowspan: 7, colspan: 1, value: '乡1' },
{ row: 4, col: 2, rowspan: 4, colspan: 1, value: '村1' },
{ row: 8, col: 2, rowspan: 2, colspan: 1, value: '村2' },
{ row: 11, col: 1, rowspan: 4, colspan: 1, value: '乡2' },
{ row: 11, col: 2, rowspan: 3, colspan: 1, value: '村3' } ]
显示效果