HTML导出是用data URI欺骗Excel解析HTML,本质为伪Excel;而Excel下载是生成标准OOXML/BIFF二进制文件。前者兼容差、样式不稳、中文易乱码、仅支持.xls且报错频繁;后者通过xlsx库生成真.xlsx,支持公式、多表、全浏览器,无警告,适合正式交付。

HTML导出 ≠ Excel下载——前者是把 HTML 字符串塞进 data: URI 里骗 Excel 打开,后者是真正生成符合 OOXML 或 BIFF 格式的二进制文件。用户点“下载”时感觉一样,但底层行为、兼容性、样式保留能力差得远。
用 data:application/vnd.ms-excel 导出 HTML 表格的本质
这其实是“伪 Excel”:浏览器把一段带 很多人写了 用 真正要交付给财务、审计这类角色的报表,别碰 的 HTML 文本,用 base64 编码后拼成 Data URI,扔给 Excel。Excel 自己解析渲染,不走任何标准 Excel 格式解析器。
Excel 打开报“文件格式与扩展名不匹配” 是常态;合并单元格、列宽控制靠 这种 HTML 属性,效果不稳定;中文乱码常见(必须确保 在模板里且生效).xlsx 完全不认这种写法
download 属性设对了,文件名才真的生效a.href = 'data:...' 却发现下载下来总是 download.xls 或随机名,问题几乎全出在 download 属性没设或设晚了。
a.download = name + '.xls',且 name 不能含路径、特殊字符(如 / \ : * ? " |)a.click() 前设置,DOM 插入后立刻设,不要等异步回调download 属性对 Data URI 的作用,iOS 全平台基本不可用window.open(a.href),但会新开窗口,且无自定义文件名为什么
XLSX.utils.table_to_sheet() 比直接拼 HTML 更可靠SheetJS(即 xlsx 库)走标准路径,才是真正“导出 Excel”:它把 DOM 表格转成二维数组 → 生成 Worksheet 对象 → 写入 Workbook → 输出 .xlsx 二进制流。table_to_sheet() 自动处理 /
结构,忽略非表格节点;
aoa_to_sheet() 要你手动遍历 ,容易漏掉 rowspan/colspan.xlsx,双击打开无警告,支持公式、条件格式(需额外配置)、多 sheetdata: URI 那套。能走后端生成(POI / EPPlus)就走后端;必须前端做,就用 xlsx 库。那些“改个 download 就能搞定”的方案,上线后八成卡在合并单元格或时间字段上。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











