javascript中可用sheetjs纯前端将json转excel下载:引入库后用json_to_sheet生成工作表,book_new和book_append_sheet创建工作簿,writefile触发下载;支持列宽、中文表头、日期格式等定制,注意ie11兼容性和移动端safari降级处理。

JavaScript 中将 JSON 数据转为 Excel 文件下载,核心是借助第三方库(如 SheetJS)生成 Excel 文件流,再触发浏览器下载。纯前端实现,无需后端参与。
使用 SheetJS(xlsx.js)生成 Excel
SheetJS 是最常用的 JavaScript Excel 处理库,支持读写多种格式(.xlsx、.xls 等),体积小、兼容性好。
- 通过 CDN 引入:<script src="https://cdn.sheetjs.com/xlsx-0.20.1/package/dist/xlsx.full.min.js"></script>
- 或用 npm 安装:npm install xlsx(适用于打包项目)
- 关键方法:XLSX.utils.json_to_sheet() 将数组型 JSON 转为工作表;XLSX.writeFile() 直接触发下载
简单示例:一键导出用户列表
假设你有如下 JSON 数据:
const jsonData = [
{ name: "张三", age: 28, city: "北京" },
{ name: "李四", age: 32, city: "上海" },
{ name: "王五", age: 25, city: "广州" }
];
转换并下载的代码如下:
function downloadAsExcel(data, filename = "data.xlsx") {
const ws = XLSX.utils.json_to_sheet(data);
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
XLSX.writeFile(wb, filename);
}
downloadAsExcel(jsonData); // 点击调用即可下载
常见定制需求处理
实际项目中常需调整列宽、标题、日期格式或合并单元格,SheetJS 提供了灵活配置方式:
- 设置列宽:在生成 sheet 后手动修改 ws['!cols'] 数组,例如 ws['!cols'] = [{ wch: 12 }, { wch: 8 }, { wch: 10 }]
- 中文表头重命名:先映射字段名,再传入 json_to_sheet,如 data.map(({name, age, city}) => ({姓名: name, 年龄: age, 城市: city}))
- 日期/数字格式化:给对应列设置 cell.z(number format),配合 cell.v 的原始值类型(Date 或 number)
- 多 sheet 导出:重复调用 book_append_sheet,传入不同数据和 sheet 名
注意点与兼容性提醒
虽然 SheetJS 支持主流浏览器,但仍有细节需留意:
- IE11 需引入 xlsx.full.min.js(含 polyfill),不推荐支持更低版本
- 大文件(>5MB)导出可能卡顿,可考虑分页导出或提示“正在生成…”
- 中文乱码问题基本不存在(xlsx 默认 UTF-8),但若用 .csv 替代,需加 BOM 头(\ufeff)
- 移动端 Safari 对 writeFile 支持有限,可降级为 Blob + a 标签下载
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











