前端使用XLSX生成下载模板、读取excel

文章介绍了如何使用JavaScript库XLSX在前端生成和修改Excel文件。首先创建工作簿,然后将JSON对象转换为工作表,附加到工作簿并写入文件。接着展示了如何添加新列数据,例如添加名为EEE的新列,填充固定值5。最后提醒,这种需求通常由后端处理,但前端也可使用XLSX实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.生成一个特定的表头excel文件并下载

const download = () => {
    //1、创建空工作簿
    const workbook = XLSX.utils.book_new();
    //2、将一组 JS 对象转换为工作表
    const ws = XLSX.utils.json_to_sheet(
      [
        {
          A: 'AAA',
          B: 'BBB',
          C: 'CCC',
          D: 'DDD',
        }
      ],
      {
        skipHeader: true //如果为 true,则不在输出中包含标题行
      }
    );
    //3、将工作表附加到工作薄
    XLSX.utils.book_append_sheet(workbook, ws, 'Sheet1');
    //4、尝试写入wb到filename。在基于浏览器的环境中,它将尝试强制客户端下载。

    XLSX.writeFile(workbook,`example.xlsx`,{ bookType: 'xlsx', type: 'array' });
  };
2.添加一列数据并下载

我的需求是有几行表格数据就要添加对应的列数据,比如我上面的例子,下载下来的表格数据是:

AAABBBCCCDDD

然后我添加了两行数据:

AAABBBCCCDDD
1234
1234

我要再添加一列数据列名为EEE,两行对应的数据都是5,聪明的我会怎么做呢꒰⑅•ᴗ•⑅꒱,这里我的文件上传使用的是antd的上传组件,不卖关子了,直接放我的代码:

const download = ()=> {
    const file = fileList[0]; // 这里的fileList是antd的上传文件组件(<Upload/>)的数据源
      const reader = new FileReader(); // 创建一个FileReader实例
      reader.readAsArrayBuffer(file); // 将文件读取为ArrayBuffer对象
      reader.onload = (e: any) => { // 当读取操作成功完成时调用
        const data = e.target.result;
        const workbook = XLSX.read(data); // 用CSV数据读取字符串。它将生成具有工作表名称为Sheet1的单页工作簿
        const ws = workbook.Sheets[workbook.SheetNames[0]]; // 定义一个worksheet
        const length = XLSX.utils.sheet_to_json(ws).length; // sheet_to_json将工作簿转成对象数组
        if (length > 0 && length <= 1000) {
          const arr = [];
          for (let i = 0; i < length; i++) {
            arr.push({ EEE: 5 });
          }
          XLSX.utils.sheet_add_json(ws, arr, { origin: 'G1' }); // 将对象数组添加到现有的工作表中,从origin开始
          XLSX.writeFile(workbook, 'example.xlsx'); // 下载文件
        } else if (length > 1000) {
          message.warning('每次最多创建1000条');
        } else {
          message.warning('请填写文档内容后上传!');
        }
  }

那么下载下来的表格数据将会变成:

AAABBBCCCDDDEEE
12345
12345

好了,感兴趣的同学可以去试试啦,不过像是这种下载模板的需求一般都是后端来做的,前端来做的话就是用XLSX,附上我参考的文档:
xlsx的官方文档
大佬的使用xlsx读取excel文件的详细步骤

### 如何在前端项目中安装和使用 `xlsx` 库 #### 安装 `xlsx` 库 为了能够在前端项目中使用 `xlsx` 库,需要通过 npm 来安装该库。打开终端并进入项目的根目录,执行如下命令: ```bash npm install xlsx --save ``` 这一步骤会将 `xlsx` 添加到项目的依赖列表中,并下载所需的包文件[^1]。 #### 在 Vue 项目中引入 `xlsx` 库 对于不同的 Vue 版本,引入方式略有不同。以下是针对 Vue 2 和 Vue 3 的具体做法: - **Vue 2** ```javascript import XLSX from 'xlsx'; ``` - **Vue 3** ```javascript import * as XLSX from 'xlsx'; ``` 上述代码片段展示了如何在两种版本的 Vue 中正确导入 `xlsx` 模块,以便后续可以在组件内部调用其方法处理 Excel 文件[^2]。 #### 使用 `xlsx` 插件读取 Excel 文件数据 一旦成功安装了 `xlsx` 插件,在前端环境中就可以利用它来解析用户上传的 Excel 文档中的内容。通常情况下,可以通过监听文件输入事件获取文件对象,再借助 `xlsx` 提供的功能完成实际的数据提取工作[^3]。 #### 导出基于模板Excel 表格 如果希望按照预定义好的格式导出 Excel 文件,则可以把设计好的 `.xlsx` 模板放置于应用的 `/public` 路径下。之后可通过 JavaScript 发起 HTTP 请求加载此模板,修改其中的内容后再保存为新的文档分发给用户。下面是一个简单的例子说明这一过程: ```javascript async function exportFromTemplate() { const response = await fetch('./static/xlsx/t1.xlsx'); const arrayBuffer = await response.arrayBuffer(); // 进一步操作... } ``` 这段脚本实现了从服务器端拉取指定路径上的 Excel 模板文件,并将其转换成适合进一步编辑的形式[^4]。 #### 扩展功能:生成含图片的 Excel 文件 当涉及到更复杂的场景比如嵌入图像时,普通的 `xlsx` 可能无法满足需求。此时可以考虑采用第三方扩展库如 `better-xlsx`,这类工具提供了更加丰富的 API 支持创建高质量的工作簿,甚至支持插入图形元素等高级特性[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值