表头是多行的,有横向合并和纵向合并
- 表头是多行的。设置worksheet 的columns header 使用数组,表示多行。使用纵向合并和横向合并表示合并的单元格。columns 和 header表示各个表格表头详细项
worksheet.columns = [ { header: ['上报', '纵向合并','数据A'],
key: 'A',
width: 18
},
{
header: ['横向合并', '纵向合并','数据B'],
key: 'B',
width: 18
}
]
- 处理纵向合并 和 横向合并 mergeCells 合并单元格,getCell 合并单元格重新赋值
worksheet.mergeCells(arr[0] + 1, i + 1, e_ind + 2, i + 1)
worksheet.getCell(e_ind + 2, i + 1).value = col_arr[e_ind + 1]
处理纵向合并 和 横向合并的代码逻辑,根据需求自己修改
// 纵向合并单元格
const row_arr: any[] = []
for (let i = 0; i < columns.length;i++) {
const col_arr = columns[i].header
let arr: number[] = []
const t_arr = []
for (let j = 0;j < col_arr.length;j++) {
if (!row_arr[j]) {
row_arr[j] = [] as string[]
}
row_arr[j].push(col_arr[j])
if (col_arr[j] == '纵向合并') {
arr.push(j)
} else {
const len = arr.length
if (len > 0) {
// 按开始行,开始列,结束行,结束列合并(相当于 K10:M12)
const e_ind = arr[len - 1]
worksheet.mergeCells(arr[0] + 1, i + 1, e_ind + 2, i + 1)
worksheet.getCell(e_ind + 2, i + 1).value = col_arr[e_ind + 1]
arr = [j]
}
}
}
}
for (let i = 0; i < row_arr.length;i++) {
const row_items = row_arr[i]
let arr: number[] = []
for (let j = 0;j < row_items.length;j++) {
const len = arr.length
if (row_items[j] != '纵向合并') {
if (row_items[j] != '横向合并') {
if (len == 0) {
arr.push(j)
} else if (len > 1) {
// 按开始行,开始列,结束行,结束列合并(相当于 K10:M12)
const e_ind = arr[len - 1]
worksheet.mergeCells(i + 1, arr[0] + 1 , i + 1,e_ind + 1)
worksheet.getCell(i + 1,e_ind + 1).value = row_items[arr[0]]
arr = [j]
}
} else {
if (len > 0) {
arr.push(j)
if (row_items.length - 1 == j) {
const e_ind = arr[len]
worksheet.mergeCells(i + 1, arr[0] + 1 , i + 1,e_ind + 1)
worksheet.getCell(i + 1,e_ind + 1).value = row_items[arr[0]]
arr = []
}
}
}
} else {
if (len > 1) {
// 按开始行,开始列,结束行,结束列合并(相当于 K10:M12)
const e_ind = arr[len - 1]
worksheet.mergeCells(i + 1, arr[0] + 1 , i + 1,e_ind + 1)
worksheet.getCell(i + 1,e_ind + 1).value = row_items[arr[0]]
arr = []
}
}
}
}