Heim > Web-Frontend > js-Tutorial > So implementieren Sie Excel-Import- und Exportfunktionen im Frontend (Codebeispiel)

So implementieren Sie Excel-Import- und Exportfunktionen im Frontend (Codebeispiel)

不言
Freigeben: 2019-01-24 09:28:41
nach vorne
6199 Leute haben es durchsucht

Der Inhalt dieses Artikels befasst sich mit der Implementierung der Excel-Import- und Exportfunktionen (Codebeispiele) im Frontend. Ich hoffe, dass er für Sie hilfreich ist .

In einem aktuellen Projekt wollte ich eine Funktion zum Importieren und Exportieren von Excel implementieren. Nachdem ich nach einigen Plug-Ins gesucht hatte, habe ich versucht, es zu verwenden wird kurz die Verwendungsmethode und die aufgetretenen Probleme aufzeichnen.

SheetJS js-xlsx ist ein Plug-in, das Tabellen in mehreren Formaten lesen und schreiben kann. Es verfügt über eine gute Browserunterstützung und kann auf mehreren Sprachplattformen verwendet werden. Es hat derzeit 14.000 Sterne auf Github.
Plug-in-Adresse: https://github.com/SheetJS/js...

Verwenden Sie

1. Installieren Sie Abhängigkeiten

und geben Sie den Projektordner ein, installieren Sie xlsx

yarn add xlsx
Nach dem Login kopieren

2. Führen Sie

import * as XLSX from 'xlsx'
Nach dem Login kopieren

in das Projekt ein, um die Export-Excel-Funktion zu implementieren

1 Beim Exportieren muss die Methode

export default function download(json,fileName){
    const type = 'xlsx'//定义导出文件的格式
    var tmpDown;//导出的内容
    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
    });
    var outputPos = Object.keys(tmpdata); //设置区域,比如表格从A1到D10
    var tmpWB = {
        SheetNames: ['mySheet'], //保存的表标题
        Sheets: {
            'mySheet': Object.assign({},
                tmpdata, //内容
                {
                    '!ref': outputPos[0] + ':' + outputPos[outputPos.length - 1] //设置填充区域
                })
        }
    };
    tmpDown = new Blob([s2ab(XLSX.write(tmpWB, 
        {bookType: (type == undefined ? 'xlsx':type),bookSST: false, type: 'binary'}//这里的数据是用来定义导出的格式类型
        ))], {
        type: ""
    }); //创建二进制对象写入转换好的字节流
    saveAs(tmpDown,fileName);
}

function saveAs(obj, fileName){//导出功能实现
    var tmpa = document.createElement("a");
    tmpa.download = fileName || "下载";
    tmpa.href = URL.createObjectURL(obj); //绑定a标签
    tmpa.click(); //模拟点击实现下载
    setTimeout(function () { //延时释放
        URL.revokeObjectURL(obj); //用URL.revokeObjectURL()来释放这个object URL
    }, 100);
}

function s2ab(s){ //字符串转字符流
    var buf = new ArrayBuffer(s.length);
    var view = new Uint8Array(buf);
    for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
    return buf;
}

function getCharCol(n){
    let temCol = '',
    s = '',
    m = 0
    while (n > 0) {
        m = n % 26 + 1
        s = String.fromCharCode(m + 64) + s
        n = (n - m) / 26
    }
    return s
}
Nach dem Login kopieren
3 verwendet werden > Auf diese Weise können Sie ganz einfach die Exportfunktion von Excel implementieren

Die Importfunktion von Excel implementieren

1 Definieren Sie die beim Import zu verwendende Methode

//导出excel
//导出excel
downloadExl = () => {
    const { results } = this.props //需要导出的json数据
    let datas = _.clone(results)//这里为了不影响项目的数据的使用 采用了lodash中的深克隆方法
    let json = datas.map(item=> { //将json数据的键名更换成导出时需要的键名
        return {
            '人员ID' :item.id,
            '姓名' : item.name,
            '证件类型': this.findIdType(item.idType),//将类型代号转为汉字
            '证件号码': item.credentialsId,
            '固定电话': item.tel,
            '移动电话': item.mobile
        }
    })
    download(json,'人员信息.xlsx')//导出的文件名
}
Nach dem Login kopieren

2. Ereignisse binden

<button>导出Excel</button>
Nach dem Login kopieren

3. Ändern Sie den Stil

//导入excel
onImportExcel = file => {
    // 获取上传的文件对象
    const { files } = file.target;
    // 通过FileReader对象读取文件
    const fileReader = new FileReader();
    fileReader.onload = event => {
        try {
            const { result } = event.target;
            // 以二进制流方式读取得到整份excel表格对象
            const workbook = XLSX.read(result, { type: 'binary' });
            // 存储获取到的数据
            let data = [];
            // 遍历每张工作表进行读取(这里默认只读取第一张表)
            for (const sheet in workbook.Sheets) {
            // esline-disable-next-line
            if (workbook.Sheets.hasOwnProperty(sheet)) {
                // 利用 sheet_to_json 方法将 excel 转成 json 数据
                data = data.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet]));
                // break; // 如果只取第一张表,就取消注释这行
            }
        }
        // 最终获取到并且格式化后的 json 数据
        const uploadData = data.map(item=> {
            return {
                id : Number(item['人员ID']),
                name : item['姓名'],
                idType: this.findIdType(item['证件类型'],'string'),
                credentialsId: item['证件号码'],
                tel: item['固定电话'],
                mobile: item['移动电话']
            }
        })
        console.log(uploadData)//这里得到了后端需要的json数据,调用接口传给后端就行了
        message.success('上传成功!') //这里用了antd中的message组件
        } catch (e) {
            // 这里可以抛出文件类型错误不正确的相关提示
            message.error('文件类型不正确!');
        }
    };
    // 以二进制方式打开文件
    fileReader.readAsBinaryString(files[0]);
}
Nach dem Login kopieren

4. Machen Sie entsprechende Eingabeaufforderungen für das Hochladen von Dateien und die Leseergebnisse im Ameisendesign wird hier verwendet) )

5. Die erhaltenen JSON-Daten
So implementieren Sie Excel-Import- und Exportfunktionen im Frontend (Codebeispiel)

Die Import- und Exportfunktionen werden auf diese Weise implementiert, ist das nicht sehr einfach? So implementieren Sie Excel-Import- und Exportfunktionen im Frontend (Codebeispiel)

Das obige ist der detaillierte Inhalt vonSo implementieren Sie Excel-Import- und Exportfunktionen im Frontend (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage