前端/Node.js操作Excel实战:使用@giszhc/xlsx(导入+导出全流程)

🚀 前端/Node.js操作Excel实战:使用@giszhc/xlsx(导入+导出全流程)

一、为什么直接用 @giszhc/xlsx

在使用 Excel 处理库时,很多人第一反应是 xlsx,但现实情况是:

  • xlsx 已长期停止维护
  • 最新版本仍为 0.18.5
  • 存在已知安全漏洞

👉 因此更推荐直接使用维护版本:

bash 复制代码
pnpm install @giszhc/xlsx

它具备:

  • ✅ API 与 xlsx 基本一致
  • ✅ 持续维护 & 修复问题
  • ✅ 可无缝替换旧项目

二、基础使用(导出 Excel)

1️⃣ 导出 JSON 数据

js 复制代码
import * as XLSX from '@giszhc/xlsx';

const data = [
  { name: '张三', age: 18 },
  { name: '李四', age: 20 }
];

// 转换为 worksheet
const ws = XLSX.utils.json_to_sheet(data);

// 创建 workbook
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, '用户数据');

// 导出文件
XLSX.writeFile(wb, '用户数据.xlsx');

2️⃣ 控制列顺序

js 复制代码
const ws = XLSX.utils.json_to_sheet(data, {
  header: ['name', 'age']
});

3️⃣ 设置列宽

js 复制代码
ws['!cols'] = [
  { wch: 20 },
  { wch: 10 }
];

三、导入 Excel(解析文件)

1️⃣ 浏览器读取

js 复制代码
import * as XLSX from '@giszhc/xlsx';

function handleFile(file) {
  const reader = new FileReader();

  reader.onload = (e) => {
    const data = new Uint8Array(e.target.result);
    const wb = XLSX.read(data, { type: 'array' });

    const ws = wb.Sheets[wb.SheetNames[0]];

    const json = XLSX.utils.sheet_to_json(ws);
    console.log(json);
  };

  reader.readAsArrayBuffer(file);
}

2️⃣ Node.js 读取

js 复制代码
import * as XLSX from '@giszhc/xlsx';

const wb = XLSX.readFile('test.xlsx');
const ws = wb.Sheets[wb.SheetNames[0]];

const data = XLSX.utils.sheet_to_json(ws);
console.log(data);

四、进阶用法(建议收藏)

1️⃣ 防止空值丢失

js 复制代码
XLSX.utils.sheet_to_json(ws, {
  defval: ''
});

2️⃣ 数组导出(自定义表头)

js 复制代码
const data = [
  ['姓名', '年龄'],
  ['张三', 18],
  ['李四', 20]
];

const ws = XLSX.utils.aoa_to_sheet(data);

3️⃣ 多 Sheet 导出

js 复制代码
const wb = XLSX.utils.book_new();

XLSX.utils.book_append_sheet(wb, ws1, 'Sheet1');
XLSX.utils.book_append_sheet(wb, ws2, 'Sheet2');

XLSX.writeFile(wb, '多表.xlsx');

五、常见坑位

❗ 日期格式异常

Excel 内部是数字时间,需要自行格式化


❗ 数字变字符串

建议在导入后做字段类型转换


❗ 大文件卡顿

  • 避免一次性处理超大数据
  • 可分批解析

六、实战建议(很重要)

如果你在做实际项目:

  • ✅ 封装统一 Excel 工具模块
  • ✅ 加入数据校验(必填、格式)
  • ✅ 做异常处理(文件损坏、格式错误)

七、总结

使用 @giszhc/xlsx 可以做到:

  • 无缝替代 xlsx
  • 保持原有开发习惯
  • 同时规避安全风险

👉 对于新项目,建议直接使用 @giszhc/xlsx,而不是再引入旧版 xlsx


如果这篇文章对你有帮助,欢迎点赞 👍 收藏 ⭐ 关注 👀

完结,撒花✿✿ヽ(°▽°)ノ✿

相关推荐
mayaairi5 分钟前
Vue2 组件通讯(二):ref、自定义事件与provide/inject实战
前端·javascript·vue.js
开开心心就好15 分钟前
PDF图片去水印软件,支持批量处理页面
前端·javascript·人工智能·智能手机·pdf·语音识别
爱敲代码的小杨.23 分钟前
【Spring】Spring Web MVC
前端·spring·mvc
是立不是利43 分钟前
深入理解JavaScript事件委托
开发语言·前端·javascript
晴天161 小时前
React 版本迭代解析:从15到19 核心差异-Day40
前端·react.js·前端框架
APItesterCris1 小时前
告别人工盯品!借助 Open‑Claw 快速搭建电商商品全自动监控与数据分析系统(完整实操代码)
java·大数据·前端·数据库
啊阿狸不会拉杆2 小时前
《计算机网络-自顶向下方法》6.7 回顾:Web页面请求的历程 读书笔记
前端·计算机网络
云上工程笔记2 小时前
四柱记账法和复式记账法有什么区别?复式记账为什么更适合查错和对账
大数据·前端·人工智能
恋猫de小郭2 小时前
Dart Skills CLI 1.0 :AI 时代的 Dart 交付支持
android·前端·flutter
Hilaku2 小时前
为什么技术极强的前端,往往当不好前端 Team Leader?
前端·javascript·程序员