CSV格式不支持垂直居中,需用SheetJS生成xlsx文件并在单元格style中设置alignment:{vertical:'center',horizontal:'center'},同时开启cellStyles:true并适配行高。
layui.exportFile() 无法设置垂直居中
直接调用 table.exportfile() 导出的文件是 csv 格式,纯文本,没有单元格样式概念。所谓“垂直居中”在 csv 里根本不存在,excel 打开时只是按默认渲染(通常是顶端对齐),你改不了。这不是配置漏了,是底层不支持。
必须换 SheetJS + xlsx 格式才能控制 vertical-align
要真正让导出的 Excel 单元格内容垂直居中,得绕过 exportFile(),用 XLSX.write() 生成 .xlsx 文件,并在每个单元格的 s(style)对象里显式写 alignment: { vertical: 'center' }。
- 确保引入了
xlsx.full.min.js(带样式支持的完整版,不是精简版) - 导出前需手动构造工作表数据(
ws),不能直接传 layui 的data数组 - 每个单元格必须带
s属性,且该s要提前注册到workbook的Styles中,否则无效 - 常见错误:只设
vertical: 'center'但没配horizontal,结果 Excel 渲染异常或忽略整个 alignment
用 excel.setExportCellStyle() 是最简路径(Layui 内置扩展)
如果你用的是较新 Layui(v2.8+)且已加载 layexcel 模块(或类似封装),可直接用它提供的 excel.setExportCellStyle():
excel.setExportCellStyle(data, 'A1:Z' + (data.length + 1), {
s: {
alignment: {
horizontal: 'center',
vertical: 'center'
}
}
});
注意:'A1:Z' + (data.length + 1) 中的行数要包含表头(+1),否则表头不会被居中;列范围(A1:Z)得按实际列数调整,写太宽不影响,但写窄了会漏掉。
vertical-align 失效的三个隐藏原因
即使代码写了 vertical: 'center',导出后仍顶端对齐,大概率是以下其一:
-
workbook没开启cellStyles: true—— SheetJS 默认关闭样式,不加这句,所有s都被丢弃 - 用了
extend: { '!cols': [...] }但没同步配!rows,导致行高未适配,视觉上像没居中(实际居中了,但行高太小把内容挤到顶) - 导出后用 WPS 打开——部分 WPS 版本对
vertical支持不全,建议用 Excel 桌面版验证,或加height: 24到!rows显式设行高
cellStyles: true 这个开关。











