给我实现一个前端的 Excel 导入和导出功能(二)

简介: 给我实现一个前端的 Excel 导入和导出功能

JSON 导出为 Excel

基本结构

页面内容也非常简单,具体如下:

image.png

<template>
  <div id="container">
    <h1>JSON 数据:</h1>
    <h2>
      <code>
        {{ jsonData }}
      </code>
    </h2>
    <button @click="exportExcel">导出 Excel</button>
  </div>
</template>
复制代码

导出功能

导出其实也很简单,首先创建 src/utils/json2Excel.ts 文件里面就是具体导出的实现,具体内容如下:

// src/utils/json2Excel.ts
import * as XLSX from "xlsx";
export default (
  data: any[],
  sheetName: string = "sheet1",
  fileName: string = "json2Excel.xlsx"
) => {
  const jsonWorkSheet = XLSX.utils.json_to_sheet(data);
  const workBook = {
    SheetNames: [sheetName], // 指定有序 sheet 的 name
    Sheets: {
      [sheetName]: jsonWorkSheet, // 表格数据内容
    },
  };
  return XLSX.writeFile(workBook, fileName); // 向文件系统写出文件
};
复制代码

然后在 App.vue 中使用,具体如下:

// src/App.vue
<script setup lang="ts">
import json2Excel from "./utils/json2Excel";
// 测试的 JSON 数据
const jsonData = [
  {
    name: "张三1",
    age: 18,
    skill: "干饭1",
    telephone: 20200825,
    address: "宇宙尽头1",
  },
  {
    name: "张三2",
    age: 19,
    skill: "干饭2",
    telephone: 20200826,
    address: "宇宙尽头2",
  },
  {
    name: "张三3",
    age: 20,
    skill: "干饭3",
    telephone: 20200827,
    address: "宇宙尽头3",
  },
  {
    name: "张三4",
    age: 21,
    skill: "干饭4",
    telephone: 20200828,
    address: "宇宙尽头4",
  },
  {
    name: "张三5",
    age: 22,
    skill: "干饭5",
    telephone: 20200829,
    address: "宇宙尽头5",
  },
  {
    name: "张三6",
    age: 23,
    skill: "干饭6",
    telephone: 20200830,
    address: "宇宙尽头6",
  },
  {
    name: "张三7",
    age: 24,
    skill: "干饭7",
    telephone: 20200831,
    address: "宇宙尽头7",
  },
  {
    name: "张三8",
    age: 25,
    skill: "干饭8",
    telephone: 20200832,
    address: "宇宙尽头8",
  },
  {
    name: "张三9",
    age: 26,
    skill: "干饭9",
    telephone: 20200833,
    address: "宇宙尽头9",
  },
  {
    name: "张三10",
    age: 27,
    skill: "干饭10",
    telephone: 20200834,
    address: "宇宙尽头10",
  },
];
// key -> name 的映射
const excelKeyToName = {
  name: "姓名",
  age: "年龄",
  skill: "特长",
  telephone: "电话",
  address: "地址",
};
// 导出 Excel 文件
const exportExcel = () => {
  // 格式化参数
  const data = jsonData.map((item) => {
    const newItem: any = {};
    Object.keys(item).forEach(key => {
      newItem[excelKeyToName[key]] = item[key];
    });
    return newItem;
  });
  // 导出 Excel
  json2Excel(data);
};
</script>
复制代码

效果演示

image.png

最后

以上只是实现了简单的单个导入、导出功能,可以将其完善为 批量操作,但是要注意批量操作带来的耗时性,将对应的耗时部分通过 webworker 等方式处理,这样页面就不需要一直等待当前的操作完成。

另外,如果有要求在导出 Excel 时有表格样式(如:行列宽高设置等)可以通过 xlsx-populate 来实现。

以上就是本文的全部内容,希望上述内容可以给大家带来一些思路,可以在评论区贡献更优质的方案。


目录
相关文章
|
10天前
|
JSON 前端开发 搜索推荐
惊!这些前端技术竟然能让你的网站实现个性化推荐功能!
【10月更文挑战第30天】随着互联网技术的发展,个性化推荐已成为提升用户体验的重要手段。前端技术如JavaScript通过捕获用户行为数据、实时更新推荐结果等方式,在实现个性化推荐中扮演关键角色。本文将深入解析这些技术,并通过示例代码展示其实际应用。
39 4
|
11天前
|
Java API Apache
|
15天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
23 4
|
19天前
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
|
1月前
|
前端开发 JavaScript
前端中的“+”连接符,居然有鲜为人知的强大功能!
【10月更文挑战第9天】前端中的“+”连接符,居然有鲜为人知的强大功能!
42 0
前端中的“+”连接符,居然有鲜为人知的强大功能!
|
28天前
|
Web App开发 存储 前端开发
前端开发必备:requestAnimationFrame、setInterval、setTimeout——功能解析与优劣对比
前端开发必备:requestAnimationFrame、setInterval、setTimeout——功能解析与优劣对比
102 0
|
28天前
|
前端开发 JavaScript API
前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法
前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法
116 0
|
28天前
|
移动开发 前端开发 JavaScript
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
139 0
|
1月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
|
3月前
|
关系型数据库 MySQL Shell
不通过navicat工具怎么把查询数据导出到excel表中
不通过navicat工具怎么把查询数据导出到excel表中
43 0