exceljs xlsx文件多级表头

982 阅读1分钟

1682220687569(1).jpg

表头是多行的,有横向合并和纵向合并

  1. 表头是多行的。设置worksheet 的columns header 使用数组,表示多行。使用纵向合并和横向合并表示合并的单元格。columns 和 header表示各个表格表头详细项
worksheet.columns = [    {        header: ['上报', '纵向合并','数据A'],
        key: 'A',
        width: 18
    },
    {
        header: ['横向合并', '纵向合并','数据B'],
        key: 'B',
        width: 18
    }
]
  1. 处理纵向合并 和 横向合并 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 = []
            }
	}
    }
}