layui table.exportFile()不支持样式设置,需用SheetJS手动构建XLSX并为指定列单元格(如“金额”列对应B2、B3…)逐个设置s.font.bold和s.font.color.rgb(6位大写,如"FF0000"),表头与数据行需分别处理。
layui table.exportFile() 无法设置导出列文字样式
直接调用 table.exportfile() 导出 excel,所有单元格文字都是默认黑体、常规粗细、无颜色——它不接受任何样式参数,也不暴露 sheetjs 的 cell style 控制入口。你传给它的 cols 和 data 只用于生成纯内容,样式完全被忽略。
必须手动生成 XLSX 并手动设置单元格 font 属性
要让某几列在导出的 Excel 中文字加粗或变红,得绕过 layui 封装,用 sheetjs(XLSX)原生 API 构建 workbook,并对目标单元格逐个设置 s.font:
- 加粗:设置
bold: true - 红色字体:设置
color: { rgb: "FF0000" }(6位大写,不带 #) - 只对数据行生效:表头(第1行)和数据行(第2行起)需分开处理;若只要“金额”列加粗,就得遍历所有数据行,定位到该列对应单元格(如
"C2"、"C3"…)并设s.font - 注意:
s属性仅在bookType: "xlsx"下有效;选"csv"或"xls"会丢弃全部样式
如何定位并修改指定列对应的所有数据单元格
关键不是改列名,而是根据列字段(field)映射到 Excel 列字母(A/B/C…),再拼出每个数据单元格地址。示例逻辑:
诊断并修复涉及公式、命名范围、Power Query 刷新、数据透视表、VBA/宏保存等问题的 Microsoft Excel XLSX 工作簿
- 先从
table.config["your-table-id"].cols[0]提取列配置,找到目标列的field: "amount"对应的索引(比如是第2列 → index = 1 → Excel 列为 "B") - 数据从第2行开始(第1行为表头),所以第1条数据的 amount 单元格是
"B2",第2条是"B3",依此类推 - 遍历
data数组,对每个i,构造地址`B${i + 2}`,然后设置:sheet[addr].s = { font: { bold: true, color: { rgb: "FF0000" } } }; - 别漏掉表头:若也要让“金额”表头加粗+红字,同样处理
"B1"
容易踩的坑:rgb 格式、大小写、作用域
这些细节一错,字体样式就完全不显示:
-
rgb值必须是 **6位大写十六进制字符串**,如"FF0000";写成"ff0000"、"#FF0000"、"FF0000FF"(8位带 alpha)都会失效 - 必须显式赋值到单元格对象的
s属性上,不能只改v(值)或t(类型) - 如果你用
XLSX.utils.aoa_to_sheet([header, ...rows]),生成的 sheet 是密集数组结构,直接按地址写s是安全的;但若用json_to_sheet,需确认是否启用cellDates等选项,否则可能干扰s写入 - 导出前务必调用
XLSX.write(wb, { type: "binary", bookType: "xlsx" }),其他 type(如 "array")可能导致样式丢失










