vue实现导入导出

导入导出常见于管理系统之类的项目,这周也是用到了,分享一下。

一.导入

  1. 导入导出都会用到xlsx这个库,直接npm i xlsx即可。

  1. 第一步点击导出以后会弹出两个按钮一个是下载导入文件的模版,另一个就是导入文件的按钮。

  1. 关于导入最简单的办法采用vue-element-admin项目上面的src/components/UploadExcel/index.vue这个文件就有导入的方法。

  1. 导入无非就是一个input标签,类型为file,我们要将他给隐藏掉直接v-show="false"即可,并为其绑定ref属性,点击导入文件的时候调用绑定的ref点击事件,这个时候windows就会让你去选择文件,input会获取到这个文件,在input上面的files属性中可以拿到。

  1. 通过将input得到的文件流信息传递给FileReader这个构造函数,FileReader是一个专门用于读取文件流的函数,readAsArrayBuffer让其将文件流读取,最后会去返回二进制数据。results就是最后读取到的文件信息,前端将这个信息进行一定的处理,传递给后端。

const reader = new FileReader()
reader.onload = e => {
  const data = e.target.result
  const file = XLSX.read(data, { type: 'array' })
  const results = XLSX.utils.sheet_to_json(worksheet)
}
reader.readAsArrayBuffer(rawFile)

二.导出

  1. 后端会给一个接口,我这里后端返回的是一个文件流。

  1. 通过创建iframe这个标签,利用浏览器会将解析不了的文件下载这一特性。

  1. 为这个iframe的src属性绑定为后端返回文件流的导出接口。(注意,后端接口必须是get,iframe,a标签这些src属性都是使用的get请求)

  1. 将这个iframe添加到页面上,让浏览器解析,这个时候就会打开excel,完成功能。

var iframe = document.createElement('iframe')
iframe.style.display = 'none'
iframe.src="后端地址"
document.body.appendChild(iframe)
setTimeout(()=>{
    iframe.remove()
})
Vue可以利用第三方库来实现Excel的导入导出,下面是一个简单的示例: 首先,安装`xlsx`和`file-saver`这两个库: ``` npm install xlsx file-saver --save ``` 然后在Vue组件,定义一个方法来实现Excel导出: ```javascript import XLSX from 'xlsx'; import FileSaver from 'file-saver'; export default { methods: { exportExcel() { // 构建Excel数据 const data = [ ['姓名', '年龄', '性别'], ['张三', 18, '男'], ['李四', 20, '女'], ['王五', 22, '男'], ]; // 创建一个Workbook对象 const workbook = XLSX.utils.book_new(); // 创建一个Worksheet对象 const sheet = XLSX.utils.aoa_to_sheet(data); // 添加Worksheet到Workbook XLSX.utils.book_append_sheet(workbook, sheet, 'Sheet1'); // 生成Excel文件 const excelFile = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); // 保存Excel文件 const fileName = 'data.xlsx'; const blob = new Blob([excelFile], { type: 'application/octet-stream' }); FileSaver.saveAs(blob, fileName); }, }, }; ``` 以上代码,我们使用`XLSX`库创建一个Workbook对象,并添加一个Worksheet对象。然后使用`FileSaver`库保存Excel文件。 接下来,我们来实现Excel的导入功能。在Vue组件,定义一个方法来实现Excel导入: ```javascript import XLSX from 'xlsx'; export default { data() { return { tableData: [], }; }, methods: { importExcel(event) { // 获取上传的文件 const file = event.target.files[0]; // 创建一个FileReader对象 const reader = new FileReader(); // 读取Excel文件 reader.onload = (e) => { // 获取Excel文件数据 const data = new Uint8Array(e.target.result); const workbook = XLSX.read(data, { type: 'array' }); // 获取第一个Worksheet const sheet = workbook.Sheets[workbook.SheetNames[0]]; // 将Worksheet转换为JSON数据 const json = XLSX.utils.sheet_to_json(sheet, { header: 1 }); // 将JSON数据转换为表格数据 const tableData = []; for (let i = 1; i < json.length; i++) { const row = {}; for (let j = 0; j < json[0].length; j++) { row[json[0][j]] = json[i][j]; } tableData.push(row); } this.tableData = tableData; }; // 读取文件数据 reader.readAsArrayBuffer(file); }, }, }; ``` 以上代码,我们使用`XLSX`库读取Excel文件,并将Worksheet转换为JSON数据。然后将JSON数据转换为表格数据,最终存储在Vue组件的`tableData`变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值