Layui table.exportFile() 不支持 Excel 列只读,因其导出的是 CSV 文本而非真实 .xlsx 文件;CSV 无单元格锁定机制,所有列天然可编辑;需改用 SheetJS 生成带 protection 的 .xlsx 或导出时过滤敏感字段。
layui
的
根本不支持设置
excel
列为只读——这不是配置遗漏或版本问题,而是设计上就不存在这个能力。
为什么 exportFile 导出的文件所有列都能编辑
Layui 导出本质是生成 CSV 文本,不是真正的 Excel(
)文件。CSV 是纯文本格式,没有单元格锁定、工作表保护等概念。你用 Excel 打开它,只是 Excel 在“兼容模式”下自动解析逗号分隔内容,所有字段天然可编辑。
不解析样式、不写入二进制结构、不调用 Office API
在
里加
、
或
全部无效——这些只影响前端表格双击编辑行为,对导出零作用
浏览器下载的 CSV 文件,Excel 默认用 GBK 解码(尤其 Windows),中文还容易变问号,更别说权限控制了
想让某列在 Excel 里真正不可编辑,必须换方案
真实 Excel 的“只读列”依赖两个前提:工作表启用保护 + 目标单元格设为
。而 Layui 原生导出连
都不生成,这条路走不通。
得弃用
,改用
(SheetJS)库生成真实
用
构造数据后,手动遍历目标列单元格,设置
关键一步不能漏:
,否则
状态完全不生效
注意:默认所有单元格都是
,所以实际要做的反而是把非目标列显式设为
导出前过滤字段比“Excel 只读”更务实
多数业务说的“只读列”,真实意图是“不让用户改敏感字段”,比如
、
。与其折腾 Excel 保护逻辑,不如导出时直接剔除这些字段。
Python对Excel操作详解 中文WORD版
本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd、xlwt和xlutils模块。另外还演示了如何通过Tcl tcom包对excel操作。感兴趣的朋友可以过来看看
下载
用
拿当前页数据,或
拿全量(Layui 2.7+)
对每行做对象解构,只保留需要导出的 key:
调用
,第三个参数
必须显式传,否则可能触发默认全量导出
如果要解决中文乱码,绕过
,自己拼 CSV 字符串并在开头加
(UTF-8 BOM)
真正难的不是加个
,而是意识到:CSV 不是 Excel,前端无法安全实现带密码的 Excel 保护——那部分逻辑一旦暴露在 JS 里,密码就等于没设。
table.exportfile().xlsxexportFilecolsreadonly: trueedit: falseexport: falselocked: true.xlsxtable.exportFile()xlsx.xlsxXLSX.utils.json_to_sheet()cell.s = { protection: { locked: true } }ws['!protect'] = { sheet: true }lockedlocked: truelocked: falseuser_idcreate_timetable.cache['your-id']table.getData('your-id')data.map(({ username, status }) => ({ username, status }))layui.table.exportFile('标题', filteredData, 'csv')'csv'exportFile'\ufeff'locked