小白也能懂的Excel导出教程:用xlsx库变大师!

58 阅读1分钟

本文介绍最简单的用法

你是否曾经为导出Excel文件而头疼?别担心,今天让我带你一步一步变成Excel导出大师!🧙‍♂️

🧰️ 第一步:像开启超级能力一样,装上xlsx工具

没了锤子,哪有铁匠?输入下面的命令,给自己加个装备:

npm install xlsx -S

✍️️ 第二步:给表格起个响亮的名字

你喜欢别人叫你小明还是叫大帅哥?列名也是一样的,我们先定义下:

const columns = [
  { title: '姓名', key: 'name' },
  { title: '年龄', key: 'age' },
  { title: '城市', key: 'city' },
];

🎉️ 第三步:你我他,都要足够空间

别把字挤在一起,给它们点空间呼吸:

const getWordCh = (val = '') => {
  let len = 0;
  for (let i = 0; i < val.length; i++) {
    if (val.charCodeAt(i) > 127 || val.charCodeAt(i) === 94) {
      len += 2;
    } else {
      len++;
    }
  }
  return len;
};

🎁️ 第四步:包装成最美的礼物

最后一步,把这一切整合成一个漂亮的Excel文件:

import * as xlsx from "xlsx";


const exportExcel = (dataSource, columns, filename) => {
  const ws_data = [columns.map(col => col.title)];
  dataSource.forEach(row => {
    ws_data.push(columns.map(col => row[col.key]));
  });

  const ws = xlsx.utils.aoa_to_sheet(ws_data);

  // 设置列的宽度
  const colWidths = columns.map(col => {
    let maxLen = getWordCh(col.title);  // 最初的长度是列名的长度
    dataSource.forEach(row => {
      const len = getWordCh(row[col.key]?.toString());  // 转化为字符串避免数字类型引起的问题
      if (len > maxLen) maxLen = len;
    });
    return { wch: maxLen };
  });

  ws['!cols'] = colWidths;

  const wb = xlsx.utils.book_new();
  xlsx.utils.book_append_sheet(wb, ws, 'Sheet1');
  xlsx.writeFile(wb, filename);
};


// 例子来啦!
const tableData = [
  { name: '小明', age: 18, city: '北京' },
  { name: '小红', age: 22, city: '上海' },
];

exportExcel(tableData, columns, '朋友们的信息.xlsx');

🥳️ 成功啦!

image.png

快去试试,变成你身边的Excel大师吧! 🚀