excel的导入导出功能,前端后端都可以实现这个功能,网上也有了很多成熟的解决方案
前端做的话,那么数据的处理就是在前端进行完成,后端提供一个大批数据导入的接口就可以了
后端做的话,前端就直接使用文件上传的方式将excel文件上传到后端,由后端进行数据的转化
做后台项目的话,一般情况下都会有这个功能,现在我就将我的常用的方案分享一下
我使用的是vue-element-admin中提供的excel导入功能
一、excel的导入
首先我们需要去将UploadExcel
组件拷贝到需要使用的的项目之中
然后安装一个必要的插件,这个插件叫做xlsx
npm install xlsx -S
在需要的位置引入UploadExcel组件并注册引用,也可以注册成全局组件
这上面有两个事件
:before-upload="xxxxxxxx" 文件上传之前的回调
:on-success="xxxxxxx" 文件上传客户端成功的回调
我们在 :before-upload=“xxxxxxxx” 中可以对文件的大小进行限制
例如:
beforeUpload(file) {
const isLt1M = file.size / 1024 / 1024 < 1
if (isLt1M) {
return true
}
this.$message({
message: 'Please do not upload files larger than 1m in size.',
type: 'warning'
})
return false
}
这里对文件大小进行限制,文件必须小于1M,不然就提示文件太大
在 :on-success=“xxxxxxx” 中可以对上传的数据进行转化
这个回调函数接收的数据中可以解构出来一个results
,就是是上传的那个文件的数据
这个数据是一个数组的形式,里面的每一个对象对应着一行的数据
然后我们就可以对这些数据进行处理,将其转化成后续需要的数据形式就可以了
二、excel的导出
在vue-element-admin中提供的excel导出功能其核心代码
onclick: function (){
import('@/vendor/Export2Excel').then(excel => {
const tHeader = ['Id', 'Title', 'Author', 'Readings', 'Date']
const filterVal = ['id', 'title', 'author', 'pageviews', 'display_time']
const list = this.list
const data = this.formatJson(filterVal, list)
excel.export_json_to_excel({
// 表头 必填项 是一个数组
header: tHeader,
// 具体数据 必填项 可以将后端数据请求转化后添加到这
data,
filename: this.filename,
autoWidth: this.autoWidth,
bookType: this.bookType
})
this.downloadLoading = false
})
}
插件包位于src/vendor/export2Excel中,采用的是按需引入的方式,什么时候正式要使用导出功能了,插件才会被正式引入到应用里
import('@/vendor/Export2Excel').then(excel => {})
Export2Excel依赖的包有js-xlsx、file-saver和script-loader 也就是说,在项目跑起来之前要安装依赖
npm install file-saver script-loader --save
所以我们还需要复制这个文件vendor/export2Excel
然后将上面的函数添加到一个事件上
在转化之前,将后端给的数据给 data
就可以了,在header
中添加你需要的表头
然后就可以直接进行输出了