需求:

Vue2.js + ElementUI 项目,通过xlsx实现一个前端的 Excel 导入和导出功能

文档

  • https://www.npmjs.com/package/xlsx
  • https://sheetjs.com/
  • https://github.com/SheetJS/sheetjs

兼容性

依赖

$ node -v
v16.14.0npm i file-saver xlsx -S

示例

依赖 package.json

{"name": "vue-excel","version": "0.1.0","private": true,"scripts": {"dev": "vue-cli-service serve","build": "vue-cli-service build"},"dependencies": {"dayjs": "^1.11.5","element-ui": "^2.15.10","file-saver": "^2.0.5","vue": "^2.6.14","xlsx": "^0.18.5"},"devDependencies": {"@vue/cli-service": "~5.0.0","less": "^4.0.0","less-loader": "^8.0.0","vue-template-compiler": "^2.6.14"}
}

引入element-ui

// main.js
import Vue from 'vue'
import App from './App.vue'import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'Vue.use(ElementUI)Vue.config.productionTip = falsenew Vue({render: function (h) {return h(App)},
}).$mount('#app')

data.js

// data.js
export const tableData = [{date: "2016-05-02",name: "王小虎",address: "上海市普陀区金沙江路 1518 弄",},{date: "2016-05-04",name: "王小虎",address: "上海市普陀区金沙江路 1517 弄",},{date: "2016-05-01",name: "王小虎",address: "上海市普陀区金沙江路 1519 弄",},{date: "2016-05-03",name: "王小虎",address: "上海市普陀区金沙江路 1516 弄",},
];

App.vue

<template><div class="container"><div style="display: flex"><el-uploadref="upload"action="action"accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":show-file-list="false":http-request="handlehttpRequest":on-change="onUploadChange"><el-buttonsize="small"type="primary"icon="el-icon-upload">导入Excel</el-button></el-upload><el-buttonstyle="margin-left: 20px"size="small"icon="el-icon-download"@click="handleDownload">导出Excel</el-button><el-buttonstyle="margin-left: 20px"size="small"icon="el-icon-delete"@click="handleClear">清空数据</el-button></div><el-table:data="list"borderstyle="width: 100%; margin-top: 20px"><template v-if="list && list.length > 0"><el-table-columnv-for="key in Object.keys(list[0] || {})":prop="key":label="key"></el-table-column></template></el-table></div>
</template><script>
import { readExcelToJson, saveJsonToExcel } from './utils.js'
import { tableData } from './data.js'export default {data() {return {file: null,list: [],}},methods: {handlehttpRequest() {},// 读取文件为json数据onUploadChange(file) {console.log(file)this.file = filereadExcelToJson(file).then((res) => {this.list = res})},handleDownload() {saveJsonToExcel(this.list, 'data.xlsx')},handleClear() {this.list = null},},created() {this.list = tableData},
}
</script><style lang="less">
body {background: #f4f4f4;padding: 0;margin: 0;
}.container {width: 1024px;// min-height: 100vh;margin: 0 auto;padding: 20px;background: #fff;
}
</style>

工具类文件 utils.js

// import XLSX from "xlsx";
import * as XLSX from 'xlsx'
import FileSaver from 'file-saver';/*** 异步读取Excel文件的sheet表为json数据* 不支持合并单元格* @param {File对象} file*/
export function readExcelToJson(file) {return new Promise((resolve, reject) => {const reader = new FileReader();reader.onload = (e) => {let data = new Uint8Array(e.target.result);let workbook = XLSX.read(data, { type: "array" });//  console.log("workbook: ", workbook);//将Excel 第一个sheet内容转为json格式let worksheet = workbook.Sheets[workbook.SheetNames[0]];let json = XLSX.utils.sheet_to_json(worksheet);//   console.log("jsonExcel:", jsonExcel);resolve(json);};reader.readAsArrayBuffer(file.raw);});
}/*** 保存json为Excel文件* @param {*} data * @param {*} filename  文件名后缀为.xlsx*/
export function saveJsonToExcel(data, filename) {let sheet = XLSX.utils.json_to_sheet(data);let workbook = {SheetNames: ["sheet1"],Sheets: {sheet1: sheet,},};let wbout = XLSX.write(workbook, {bookType: "xlsx",bookSST: true,type: "array",});FileSaver.saveAs(new Blob([wbout], { type: "application/octet-stream" }),filename);
}

导出截图

完整代码:https://github.com/mouday/vue-excel
在线演示:https://mouday.github.io/vue-excel/

参考文章

  1. 如何使用JavaScript实现纯前端读取和导出excel文件
  2. 前端导出Excel和下载后端Excel以及前端处理Excel
  3. 给我实现一个前端的 Excel 导入和导出功能

Vue2.js:xlsx实现Excel文件的导入导出相关推荐

  1. 前端实现excel文件的导入导出

    前端实现excel文件的导入导出 导入文件 导出文件 导入文件 html: <el-dropdown v-waves @command="handleBatchCommand" ...

  2. easyexcel导入时读不到数据_SpringBoot中EasyExcel实现Excel文件的导入导出

    前言 在我们日常的开发过程中经常会使用Excel文件的形式来批量地上传下载系统数据,我们最常用的工具是Apache poi,但是如果数据到底上百万时,将会造成内存溢出的问题,那么我们怎么去实现百万数据 ...

  3. ABAP 程序完成EXCEL文件的导入导出,OLE技术的应用

    今天主要学习了使用微软的OLE技术,用ABAP程序完成excel文件的导入导出处理. (一)常用的OLE函数: CALL METHOD  ,  CALL OBJECT ,   FREE OBJECT ...

  4. java做 excel文件的 导入导出 (SSM+layer)

    做的项目使用时 Java ssm + 前端layer+ freemark. 因为是从项目中扣的代码.整理了下逻辑. 有问题的下方留言哈 导入的依赖 poi <!-- https://mvnrep ...

  5. JAVA实现Excel文件的导入导出

    版权声明:请勿用于任何商业用途的文章转载,转载请说明出处! 1.导入POI的JAR包 <!-- excel POI --><dependency><groupId> ...

  6. SpringBoot+Hutool工具类Excel工具-ExcelUtil实现excel文件的导入导出

    Hutool会用的话极大了简化了操作Excel的过程,提高开发效率,废话少说上代码. excel文件导出: public void downLoadFile(UserDto dto,HttpServl ...

  7. 把服务器sql数据库导出excel文件,将mysql数据库数据以Excel文件的形式导出

    最近在工作中,领导让从数据库中导出一些数据并存放到Excel表格中,网上有许多教程,下面是我总结的其中俩种方法. 从数据库管理工具中导出(navicat) 在navicat导出数据导Excel中还是比 ...

  8. 微信小程序 -- 数据库数据excel文件批量导入

    一.excel文件批量导入数据到数据库 1.创建node.js函数upload,点击upload右键外部终端中安装类库 npm install node-xlsx 2.云函数代码 const clou ...

  9. Java:实现文件批量导入导出实践(兼容xls,xlsx)

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:小卖铺的老爷爷 cnblogs.com/laoyeye/p/6938889.html ...

最新文章

  1. VTK+MFC 系列教程 非常强大
  2. Flask 中内置的 Session
  3. 【OS学习笔记】二十一 保护模式六:保户模式下操作系统内核如何加载用户程序并运行 对应的汇编代码之内核代码
  4. PHP微信app接口退款,10.PHP接入微信退款接口
  5. css-animation-走路动画
  6. 证监会依法对4宗案件作出行政处罚
  7. Spring4.x(17)--SpringIOC注解的HelloWorld
  8. 关于“想哭”病毒,我也来两句。--转载
  9. 如何在Ruby on Rails迁移中重命名数据库列?
  10. 值对于int32太大或太小_影响涂镀层测厚仪测量值的因素与解决方法
  11. elk替代_Golang-logrus简单的日志收集系统(替代ELKB)
  12. creator找不到编译器 qt_Qt与Web混合开发(一)--简单使用
  13. 大数据学习-----排错记录
  14. 移动机会网络中的节点分簇路由算法
  15. hud抬头显示器哪个好_什么样的HUD抬头显示器好?圆盾用是实力说话
  16. 题朋友云南骑马照【明书、圣契】
  17. C++实战案例之通讯录管理系统
  18. mysql面向用户是什么意思_原来大厂的MySQL面试会问这些问题!
  19. Java算法题:Z字形变换
  20. 撕开的黎明--孔庆东卷

热门文章

  1. ChatGPT团队出品,必属精品—Bito插件完全指北
  2. 如何下载安装最新版本的 Android Studio
  3. 基于mysql的高校学生管理系统_基于Web的学生考勤管理系统的设计与实现(Struts2,MySQL)...
  4. 如何使用vlookup函数?
  5. 52ABP前端升级2.0.x指南
  6. Unity Text 实现图文混排和超链接功能
  7. 1、编写程序,分别用二分法和牛顿迭代法求解方程x3 – 3x – 1 = 0在x = 2附近的实根,要求计算精确到小数点后七位数字为止,并将求出的近似结果与理论值2cos20 相比较,二分法的初始迭代
  8. 一个中文字符对应几个字节?
  9. 怎么让图片放大不模糊?
  10. 高起点上再出发!金智维2022夏季发布会暨6周年庆典成功举办