前端table表格使用xlsx与file-saver和xlsx-style数据导出xlsx表格

  • 使用三方库
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/1b680b1d452e4416aa47ffbd87663cda.png

  • 使用中项目引入

import FileSaver from "file-saver";
import XLSX from "xlsx";
import { write } from "xlsx-style";
import { s2ab } from "@/utils/util";
  • 对应代码
// s2ab方法
export function s2ab(s) {
  let buf = new ArrayBuffer(s.length);
  let view = new Uint8Array(buf);
  for (let i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
  return buf;
}
// 假设有以下数据需要导出
const data = [
  { name: '张三', age: 18, gender: '男' },
  { name: '李四', age: 20, gender: '女' },
  { name: '王五', age: 22, gender: '男' },
];
let headerReplace = {};
headerReplace.name = "姓名";
headerReplace.age = "昵称";
headerReplace.gender = "手机号";
//数据源
const sheet = [headerReplace, ...data];
// 创建一个sheet表格   使用json_to_sheet, 数据格式比较为  数组包对象, 不然会报错
const worksheet = XLSX.utils.json_to_sheet(sheet, {
  // 这里可以通过设置header, 来对导出数据 列 顺序的排序
  // 实测可以只写一部分, 也可以整体排序
  // ["id", "name", "age"] 相当于把上面整个表头给限制顺序了
  header: [],
  // 跳过 Header, 就是把原来表格数据的表头去掉了, headerReplace渲染的数据 "冒充" 表头了
  skipHeader: true,
});
//为单元格加上样式
// 设置样式
for (let [key, value] of Object.entries(worksheet)) {
  if (key.startsWith("!")) continue;
  // value是一个单元格对象(Cell Objects),s表格为样式对象(Style Objects)
  value.s = {
    alignment: { vertical: "center", horizontal: "center" },
    border: {},
  };
}
worksheet["!cols"] = [{wpx: 150},{wpx: 150},{wpx: 150}] // 表格对应宽度
// 简单理解为在内存中 创建一个xlsx 文件
const newWorkBook = XLSX.utils.book_new();
// 把worksheet添加到workbook中
XLSX.utils.book_append_sheet(newWorkBook, worksheet, "SheetJS");
// 写入文件, 是否直接下载或选择下载到指定路径取决于浏览器的下载设置, 后面的是文件名称和后缀

谷歌浏览器开启如图则选择下载路径,否则直接下载
在这里插入图片描述

// 导出表格,这种导出的表格是不会有样式的,就是一个只有数据的表格。
// XLSX.writeFile(newWorkBook, `活动报名人员.xlsx`);
// 如果要样式,需要用xlsx-style的write方法
// 将工作簿转换为二进制数据
let wopts = { bookType: "xlsx", bookSST: false, type: "binary" };
let wbout = write(newWorkBook, wopts);
// 否则 使用
// const wbout = XLSX.write(newWorkBook, wopts);
// 导出表格
FileSaver.saveAs(new Blob([s2ab(wbout)], { type: "" }), `表格.xlsx`);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值