Vue+Element导入导出Excel

一,安装
npm install -S file-saver xlsx
npm install -D script-loader

二,导入Excel
1,Element 上传控件

<el-upload
  action="/"
  :on-change="onChange"
  :auto-upload="false"
  :show-file-list="false"
  accept=".xls, .xlsx"
  :style="{'float': 'left'}">
      <el-button size="small" type="primary">选择文件</el-button>
  </el-upload>
onChange(file, fileList) {
            // 调用读取数据的方法
            let res = this.TableData
            let num = this.total
            readExcel(file, res, num)
            setTimeout(res => {
                this.total = this.TableData.length 
            }, 300) 
        }, 
import XLSX from 'xlsx'
//读取文件数据
// 参数:读取的文件, 已有数据列表, 已有数据的数量
export function readExcel(files, outputs, num) {
    if (!files) {
        //如果没有文件
        return false;
    } else if (!/\.(xls|xlsx)$/.test(files.name.toLowerCase())) {
        this.$message.error("上传格式不正确,请上传xls或者xlsx格式");
        return false;
    }
    let number = 0
    const fileReader = new FileReader();
    fileReader.onload = ev => {
        try {
            const data = ev.target.result;
            const workbook = XLSX.read(data, {
                type: "binary"
            });
            //导入的文件名称
            const wsname = workbook.SheetNames[0]; //取第一张表
            const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname]); //生成json表格内容
            number =  num + ws.length
            // 存放表头字段
            let tableHeader = []
            for (let val in outputs[0]) {
                tableHeader.push(val)
            }
            // 追加文件内的内容到 outputs
            for (let i = 0; i < ws.length; i++) {
                var sheetData = {}
                for (let j=0; j<tableHeader.length; j++) {
                    sheetData[tableHeader[j]] = ws[i][tableHeader[j]];
                    
                }
                outputs.push(sheetData);
            }
            // console.log("outputs", outputs) 
        }
        catch (e) {
            console.log(e);
            return false;
        }
    };
    // 如果为原生 input 则应是 files[0]
    fileReader.readAsBinaryString(files.raw);
    
    setTimeout(res => {
        return number
    },10)
    
}

三,导出Excel
1,将其中的2个JS文件放入到自己的工程中。
这几个文件不支持import引入,所以需要script-loader来将他们挂载到全局环境下
2,导出函数

export function getExcel(res) {
    // res 是需要导出的列表[{},{}]
    require.ensure([], () => {
        const { export_json_to_excel } = require('./Export2Excel')
        // 获取全部字段名  作为表头
        const filterVal = []
        const tHeader = []
        for(let key  in res[0]){
            filterVal.push(key)
            tHeader.push(key)
        }
        // tHeader为导出Excel表头名称
        const data = res.map(v => filterVal.map(j => v[j]))
        // TableData  即为导出Excel名称
        export_json_to_excel(tHeader, data, 'TableData')
    })
}

这里的引用请根据自己的层级关系和文件夹命名require(’…/…/introduce/Export2Excel.js’)

res为传入的数组,格式如:res =[{name:‘小白’,age:‘18’},{name:‘小黑’,age:‘16’}]

tHeader为导出Excel表头名称,导出列表名称即为导出Excel名称

下载的Excel位置根据浏览器设置的下载位置而定

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在Vue 2.x中使用Element UI来导入导出Excel,你需要安装element-ui和file-saver插件。 首先,在Vue项目中使用npm或yarn安装Element UI和file-saver插件: ``` npm install element-ui file-saver --save ``` 然后,在Vue组件中引入所需的文件: ```javascript import { Button, Table } from 'element-ui' import XLSX from 'xlsx' import FileSaver from 'file-saver' ``` 在组件中,你需要定义导入导出Excel的方法。下面是一个简单的示例: ```javascript methods: { // 导入Excel handleImportExcel(file) { const reader = new FileReader() reader.onload = (e) => { const data = new Uint8Array(e.target.result) const workbook = XLSX.read(data, { type: 'array' }) const worksheet = workbook.Sheets[workbook.SheetNames[0]] const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 }) // 处理导入Excel数据 console.log(jsonData) } reader.readAsArrayBuffer(file.raw) }, // 导出Excel handleExportExcel() { const jsonData = [ ['姓名', '年龄', '性别'], ['张三', 18, '男'], ['李四', 20, '女'] ] const worksheet = XLSX.utils.aoa_to_sheet(jsonData) const workbook = XLSX.utils.book_new() XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1') const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }) const excelData = new Blob([excelBuffer], { type: 'application/octet-stream' }) FileSaver.saveAs(excelData, 'example.xlsx') } } ``` 最后,在模板中使用Element UI的Button和Table组件,分别绑定导入导出Excel的方法: ```html <template> <div> <el-button type="primary" @change="handleImportExcel">导入Excel</el-button> <el-table :data="tableData"> <!-- 表格内容 --> </el-table> <el-button type="success" @click="handleExportExcel">导出Excel</el-button> </div> </template> ``` 这样,你就可以在Vue项目中使用Element UI来导入导出Excel了。当用户选择一个Excel文件时,`handleImportExcel`方法将会被触发,并将Excel数据转换为JSON数据进行处理。而`handleExportExcel`方法则会将JSON数据转换为Excel文件并进行下载。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值