jx-xlsx 合并单元格使用“!merges”特定关键字,格式如下:
[{
s: { // s 开始位置
c: 0, // 开始列
r: 0 // 开始取值范围
},
e: { // e 结束位置
c: 3, // 结束列
r: 0 // 结束范围
}
}]其中:
s 应该是 start,开始
e 应该是 end,结束
c 应该是 column,列
r 应该是 row,行
实例关键代码:
// 表格范围,范围越大生成越慢
var ref = 'A1:D10';
// 构建 workbook 对象
var wb = {
SheetNames: ['Sheet1'],
Sheets: {
// Sheet1 表示工作簿名称
Sheet1: Object.assign({}, output, {
'!ref': ref,
// 合并
'!merges': [{ // 合并第一行的第一、第二、第三、第四列
s: { // s开始
c: 0, // 开始列
r: 0 // 开始取值范围
},
e: { // e结束
c: 3, // 结束列
r: 0 // 结束范围
}
}]
})
}
};
// 写出Excel工作簿
XLSX.writeFile(wb, filename);完整实例代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>JS-XLSX Demo</title>
<script type="text/javascript" src='./libs/xlsx.full.min.js'></script>
</head>
<body>
<p>使用JS导出Excel表,将表格标题进行列合并</p>
<p>
<button onclick="exportExcel()">导出Excel</button>
</p>
<script type="text/javascript">
function exportExcel() {
// Excel文件名称
var filename = "write_num.xlsx";
// 数据头
var headers = {
A1: { v: '2019年学生成绩表' },
A2: { v: '编号' },
B2: { v: '姓名' },
C2: { v: '年龄' },
D2: { v: '邮箱' }
};
// 数据正文
var datas = {
A3: { v:'100' },
B3: { v:'张三' },
C3: { v:'28' },
D3: { v:'sanzhang@outlook.com' },
A4: { v:'200' },
B4: { v:'李四' },
C4: { v:'26' },
D4: { v:'sili@sina.com' }
};
// 合并 headers 和 data
var output = Object.assign({}, headers, datas);
// 表格范围,范围越大生成越慢
var ref = 'A1:D10';
// 构建 workbook 对象
var wb = {
SheetNames: ['Sheet1'],
Sheets: {
// Sheet1 表示工作簿名称
Sheet1: Object.assign({}, output, {
'!ref': ref,
// 合并
'!merges': [{
s: { // s开始
c: 0, // 开始列
r: 0 // 开始取值范围
},
e: { // e结束
c: 3, // 结束列
r: 0 // 结束范围
}
}]
})
}
};
// 写出Excel工作簿
XLSX.writeFile(wb, filename);
}
</script>
</body>
</html>运行 demo 效果如下图:

点击“导出Excel”按钮导出数据。如下图:

注意:
在上面的实例代码中,我们看见有 A1、A2、A3 等值,这些其实就是 excel 表格中用来定位单元格的。如果你的数据是一个JSON数组,你需要将数据转换成 A1、A2、A3等数据。