layui table.exportFile() 不支持竖排文字,因其导出 CSV/HTML 而非真实 Excel;妥协方案是插入换行符并手动设置自动换行与行列尺寸;真竖排需用 SheetJS 生成 .xlsx 并设 textRotation,但受 Excel 设置及软件兼容性限制。
layui table 导出 Excel 本身不支持 vertical text(竖排文字)
layui 的 table.exportfile() 是调用浏览器原生的 csv 或简单 html 表格导出,底层不走 excel sdk(如 sheetjs、exceljs),也不生成真正的 .xlsx 文件。它导出的文件本质是 utf-8 编码的 csv 或带样式标签的 html,**excel 打开后无法识别「竖排文字」这类富格式**——所有单元格文字默认横排,且方向设置被完全忽略。
导出时想让文字“看起来竖着”,只能靠字符级模拟
如果你导出的是 CSV(默认方式),Excel 会按纯文本解析,连自动换行都不可控,更别说旋转。唯一可操作的妥协方案是:在数据层把每个汉字后面插入换行符 \n,让 Excel 在「自动换行」开启 + 行高足够时“视觉上竖排”:
- 确保导出前对目标列字段做处理:
r.name = r.name.split('').join('\n') - 导出后手动在 Excel 中:选中该列 → 右键「设置单元格格式」→「对齐」→ 勾选「自动换行」→ 调整行高(比如设为 30)→ 列宽调窄(如 8 字符)
- 注意:此法依赖 Excel 渲染行为,不同版本(尤其是 Mac 版或 WPS)可能不换行或错位;导出的 CSV 文件用记事本打开就是一堆回车,不是真正竖排
真要竖排文字,必须放弃 table.exportFile(),改用 SheetJS
真正控制 Excel 单元格文字方向(包括 90° 旋转、竖排、-90°),必须生成标准 .xlsx 文件,而 layui 原生不提供该能力。推荐用 SheetJS(xlsx.full.min.js)手动生成:
- 先用
table.cache['your-id']拿到当前表格全部数据 - 创建
workbook和worksheet,对指定列的单元格(如A1:A100)设置alignment: { textRotation: 90 }(90° 向上)或textRotation: -90(向下),vertical: 'center'配合居中 - 注意:SheetJS 的
textRotation值是数字,不是字符串;90表示逆时针转 90°,视觉效果是文字从下到上竖排 - 导出调用
XLSX.writeFile(wb, 'report.xlsx'),不再走 layui 的导出逻辑
容易被忽略的关键点
即使用了 SheetJS,竖排在 Excel 中仍可能“失效”——常见原因是:目标单元格的「对齐」设置里勾了「缩小字体填充」或「合并单元格」,这两项会强制覆盖 textRotation;另外,WPS 对 textRotation 支持极差,建议导出后用 Microsoft Excel 打开验证。真正稳定的竖排只存在于 Excel 原生界面操作中,程序生成的竖排始终是“尽力而为”。











