vue excel导入导出

Excel导出

依赖js-xlsx实现的

  • 首先需要下载3个依赖包
npm install xlsx file-saver -S

npm install script-loader -S -D复制代码
  • 在src目录下新建vendor文件夹,引入Blob.js和Export2Excel.js


  • 可以happy的导出啦
  1. 导出

    fileDown() {
        //引入文件     	
        import('../../../vendor/Export2Excel.js').then(excel => {
        const tHeader = ['数据元分类', '中文名称', '英文名称', '代码', '版本号', '发布日期'] //头部转换中文
        const filterVal = ['eltTypeValue', 'eltName', 'eltNameE', 'eltCode', 'eltVersion', 'createDate'] const list = this.dialogTabDataSel const data = this.formatJson(filterVal, list) excel.export_json_to_excel({
            header: tHeader,
            //导出头
            data,
            //导出数据
            filename: '数据元' //文件名
        })
    })
    },
    formatJson(filterVal, jsonData) {
        return jsonData.map(v = >filterVal.map(j = >v[j]))
    },
    
    复制代码

  2. 导入

用了element-ui的Upload 上传组件,需接口校验上传的excle文件数据格式是否正确

<el-upload
  ref="upfile"
 :before-upload="beforeUpload"
  action=""
  accept=".xlsx, .xls"
  list-type="text"
 :on-remove="handleRemove"
 :limit="1"
 :on-exceed="handleExceed"
 :http-request="onSuccess">
  <el-button size="small" type="primary">选择</el-button>
</el-upload>复制代码

onSuccess(content){
        const fd = new FormData();
        fd.append('file', content.file)
        importElement(fd).then(response => {
          if(response.status == 'SUCCESS'){
	      this.$message({
 		message: '上传成功!',
 		type: 'success',
	     });
	this.fileImport = false;
	//清除文件
	this.handleRemove()
	}else if(response.status == '500'){
		this.$message.error('服务器异常');
	}else{
		this.$message.error(response.msg);
						
	}
       })
			
},         复制代码

项目要求 需要导出错误数据、以及错误原因,一开始接口把这个两种数据分开,我当时想到时分成两个工作簿,于是去度娘那逛了一圈,找了大佬代码改了改

export
function downloadExl(josnlist, type) {
    var json = JSON.parse(JSON.stringify(josnlist[0]));
    var templist = [];
    for (var i in josnlist) {
        var json = JSON.parse(JSON.stringify(josnlist[i]));
        var tmpdata = json[0];
        json.unshift({});
        var keyMap = []; //获取keys
        for (var k in tmpdata) {
            keyMap.push(k);
            json[0][k] = k;
        }
        var tmpdata = []; //用来保存转换好的json 
        json.map((v, i) = >keyMap.map((k, j) = >Object.assign({},
        {
            v: v[k],
            position: (j > 25 ? getCharCol(j) : String.fromCharCode(65 + j)) + (i + 1)
        }))).reduce((prev, next) = >prev.concat(next)).forEach((v, i) = >tmpdata[v.position] = {
            v: v.v
        });
        templist.push(tmpdata)
    }
    var outputPos0 = Object.keys(templist[0]); //设置区域,比如表格从A1到D10
    var outputPos1 = Object.keys(templist[1]); //设置区域,比如表格从A1到D10
    var tmpWB = {
        SheetNames: ['errorMsg', 'errorList'],
        //保存的表标题
        Sheets: {
            'errorMsg': Object.assign({},
                templist[0], //错误信息描述
                {
                    '!ref': outputPos0[0] + ':' + outputPos0[outputPos0.length - 1] //设置填充区域
                }),
            'errorList': Object.assign({},
                templist[1], //错误信息内容
                {
                    '!ref': outputPos1[0] + ':' + outputPos1[outputPos1.length - 1] //设置填充区域
                }),

        }
    };
    var wbout = XLSX.write(tmpWB, {
        bookType: 'xlsx',
        bookSST: false,
        type: 'binary'
    });
    var fileName = "问题数据" + newdate() + ".xlsx";
    saveAs(new Blob([s2ab(wbout)], {
        type: "application/octet-stream"
    }), fileName)
}
复制代码


Vue 中可以使用第三方库 `xlsx` 来实现 Excel 导入导出的功能。 首先,需要在项目中安装 `xlsx`: ``` npm install xlsx --save ``` 然后,在需要使用 Excel 导入导出功能的组件中,引入 `xlsx`: ```javascript import XLSX from 'xlsx'; ``` 接下来,我们可以定义两个函数,一个用于导入 Excel 文件,一个用于导出 Excel 文件。 Excel 文件导入函数如下: ```javascript methods: { onFileChange(e) { /* 获取上传的文件 */ const files = e.target.files; if (files.length <= 0) { return; } /* 通过 fileReader 对象读取文件数据 */ const fileReader = new FileReader(); fileReader.onload = (ev) => { try { const data = ev.target.result; /* 通过 XLSX 读取文件数据 */ const workbook = XLSX.read(data, { type: 'binary' }); /* 获取第一个工作表的数据 */ const worksheet = workbook.Sheets[workbook.SheetNames[0]]; /* 将数据转换为 JSON 格式 */ const jsonData = XLSX.utils.sheet_to_json(worksheet, { raw: true }); console.log(jsonData); } catch (e) { console.error(e); } }; fileReader.readAsBinaryString(files[0]); } } ``` 该函数通过 `FileReader` 对象读取 Excel 文件数据,然后通过 `XLSX` 库解析文件数据,将其转换为 JSON 格式,并输出到控制台中。 Excel 文件导出函数如下: ```javascript methods: { exportExcel() { /* 定义 Excel 文件数据 */ const data = [ ['name', 'age', 'gender'], ['Tom', 18, 'male'], ['Jerry', 20, 'female'], ['Lucy', 22, 'female'] ]; /* 创建 Workbook 对象 */ const workbook = XLSX.utils.book_new(); /* 创建 Worksheet 对象 */ const worksheet = XLSX.utils.aoa_to_sheet(data); /* 将 Worksheet 添加到 Workbook 中 */ XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); /* 将 Workbook 转换为二进制数据 */ const wbout = XLSX.write(workbook, { bookType: 'xlsx', type: 'binary' }); /* 创建 Blob 对象 */ const blob = new Blob([s2ab(wbout)], { type: 'application/octet-stream' }); /* 下载文件 */ const fileName = 'data.xlsx'; if (navigator.msSaveBlob) { navigator.msSaveBlob(blob, fileName); } else { const link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); link.download = fileName; link.click(); window.URL.revokeObjectURL(link.href); } } } ``` 该函数定义了一个数据数组,然后通过 `XLSX` 库将其转换为 Excel 文件数据,最后将文件数据通过 Blob 对象下载到本地。 需要注意的是,该函数中使用了一个 `s2ab` 函数,该函数用于将字符串转换为二进制数组。该函数的实现如下: ```javascript function s2ab(s) { const buf = new ArrayBuffer(s.length); const view = new Uint8Array(buf); for (let i = 0; i < s.length; i++) { view[i] = s.charCodeAt(i) & 0xFF; } return buf; } ``` 这样,我们就可以在 Vue 中实现 Excel 导入导出的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值