赞
踩
一,需求:
1,导入导出的必要性
导入与导出在日常项目开发中经常用到,
批量导入功能可以快速插入添加数据。
导出功能则可方便直观明了拿到所需展示的重要数据。
2,xls和xlsx区别?
1、文件格式不同。
xls 是一个特有的二进制格式,其核心结bai构是复合文档类型的结构,
而 xlsx 的核心结构是 XML 类型的结构,
采用的是基于 XML 的压缩方式,使其占用的空间更小。
2、版本不同。
xls是excel2003及以前版本生成的文件格式,
而xlsx是excel2007及以后版本生成的文件格式。
3、兼容性不同。
xlsx格式是向下兼容的,可兼容xls格式。
二,导入
1,页面
<FormItem label="开始导入:"> <Upload v-show="!isSpinShow" ref="upload" action :before-upload="handleUpload" name="files" :format="uploadFormat" :on-format-error="onFormatError" style="width: 100%" v-model="editForm.mobilesFile" > <i-button icon="ios-cloud-upload-outline" style="width: 270px" >上传文件 {{showFileName}}</i-button > </Upload> <Spin fix v-show="isSpinShow"> <Icon type="load-c" size="30" class="demo-spin-icon-load" ></Icon> <div>请等待...</div> </Spin> </FormItem >
2,data中声明格式:uploadFormat
isSpinShow: false,
uploadFormat: ["txt", "csv"]
editForm: {
id: "",
mobilesFile: "",
reason: "",
},
3,文件大小等方面限制:
//导入文件代码 handleUpload(file) { if (this.file.length >= 1) { this.$Message.info("每次只能传1个文件"); } let limit = Math.round(file.size); //单位为KB if (limit > 10 * 1024 * 1024) { //小于10MB,则转化成MB let size = ""; size = (limit / (1024 * 1024)).toFixed(2) + "MB"; this.$Message.error("上传失败,文件已超出限制"); console.log("文件大小为", size); } else { let split = file.name.split("."); this.showFileName=file.name; let mime = split[split.length - 1]; if (mime === "csv" || mime === "txt") { this.file.push(file); } else { this.$Message.error("请上传txt,csv格式的文件"); } } return false; }, onFormatError(file, filelist) { this.$Message.error("请上传txt,csv格式的文件"); },
4,导入效果:
三,导出
1,在common.vue中封装导出接口:
src/components/common.vue
a.简单封装:
exportFile(url, params) { this.$axios .request({ url, method: "post", responseType: "blob", data: params, }) .then((res) => { let content = res.data.data; let blob = new Blob([content], { type: "application/vnd.ms-excel;charset=utf-8", }); let url = URL.createObjectURL(blob); let a = document.createElement("a"); let fileName = res.headers.filename; a.style.display = "none"; a.href = url; a.download = fileName; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); }); },
b.带文件名的封装方法:
文件名+随机数命名。
downloadFile(exportUrl, fileName, params) { this.$axios .request({ method: "post", url: exportUrl, data: params, responseType: "blob", }) .then((res) => { const link = document.createElement("a"); let blob = new Blob([res.data], { type: "application/vnd.ms-excel" }); link.style.display = "none"; link.href = URL.createObjectURL(blob); let num = ""; for (let i = 0; i < 10; i++) { num += Math.ceil(Math.random() * 10); } link.setAttribute("download", fileName+"_"+num+".xlsx"); document.body.appendChild(link); link.click(); document.body.removeChild(link); }) .catch((error) => { this.$Message.error(res.data.data); }); },
2,引入公共组件,在mixins中注入
import Common from "_c/common.vue";
export default {
mixins: [Common],
data(){
return {
}
}
}
3,调用接口使用:
exported(){
if (this.totalElements > 100000) {
this.$Message.warning("导出数量最大为10万条");
return;
}
this.downloadFile("/downDetailBill/export", "账单",this.queryParam)
}
4,导出效果
a,导出失败1
b,导出失败2
c,导出成功:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。