溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何解決layUI導(dǎo)出到Excel時身份證號碼、銀行卡號顯示不正確的問題

發(fā)布時間:2021-08-06 10:13:40 來源:億速云 閱讀:266 作者:chen 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“如何解決layUI導(dǎo)出到Excel時身份證號碼、銀行卡號顯示不正確的問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何解決layUI導(dǎo)出到Excel時身份證號碼、銀行卡號顯示不正確的問題”吧!

修改table.js 使用JS-excel 前端excel導(dǎo)出框架來實現(xiàn)Excel 導(dǎo)出

感謝layui 的編寫者賢心,以及對layui做出貢獻的各位大神,讓我們有了開箱即用的前端js框架。為項目的編寫節(jié)省了不少時間。

在使用layui table組件的過程中,發(fā)現(xiàn)在導(dǎo)出excel的時候身份證號碼顯示不正確 變成了科學計數(shù)法。

后來發(fā)現(xiàn)layUI在導(dǎo)出excel的時候其實和導(dǎo)出csv是一樣的處理,造成了雖然導(dǎo)出數(shù)據(jù)用txt打開是正確的,

但是用excel 等工具打開會出現(xiàn)身份證,銀行卡等信息被當成了數(shù)值類型。

變成了科學計數(shù)法,無法正常顯示的問題。無法滿足項目客戶需求,通過后臺代碼導(dǎo)出excel 代價太大。系統(tǒng)有很多表需要導(dǎo)出,開發(fā)成本太高。

而且,太多導(dǎo)出會嚴重影響服務(wù)器性能。

怎么解決呢?推薦:layui教程

后來我找了一個前端的 js 導(dǎo)出excel的框架 sheetjs

發(fā)現(xiàn)里面有一個XLSX.utils.json_to_sheet 的方法挺好用,就想著自己嘗試修改table.js源碼來解決這個問題。

以下是我的解決方案,希望可以幫到你們

1: 在引入layui.js前 需要引入 xlsx.full.min.js.

<script type="text/javascript" src="../../js/xlsx.full.min.js" charset="utf-8"></script><script type="text/javascript" src="../../lib/layui/layui.js" charset="utf-8"></script>

2: 修改table.js 源碼

//Conan Start    //準備csv導(dǎo)出數(shù)據(jù)    table.prepareCSVData = function (data, id) {        var dataTitle = [], dataMain = [];        layui.each(data, function (i1, item1) {            var vals = [];            if (typeof id === 'object') { //ID直接為表頭數(shù)據(jù)                layui.each(id, function (i, item) {                    i1 == 0 && dataTitle.push(item || '');                });                layui.each(table.clearCacheKey(item1), function (i2, item2) {                    vals.push(item2);                });            } else {                table.eachCols(id, function (i3, item3) {                    if (item3.field && item3.type == 'normal' && !item3.hide) {                        i1 == 0 && dataTitle.push(item3.title || '');                        vals.push(item1[item3.field]);                    }                });            }            dataMain.push(vals.join(','))        });        return dataTitle.join(',') + '\r\n' + dataMain.join('\r\n');    }    //準備Excel表格導(dǎo)出數(shù)據(jù)    table.prepareExcelData = function (data, id) {        var excelData = [];        var dataTitle = [];        layui.each(data, function (i1, item1) {            var vals = [];            if (typeof id === 'object') {                 layui.each(id, function (i, item) {                    i1 == 0 && dataTitle.push(item || '');                });                layui.each(table.clearCacheKey(item1), function (i2, item2) {                    vals.push(item2);                });            } else {                table.eachCols(id, function (i3, item3) {                    if (item3.field && item3.type == 'normal' && !item3.hide) {                        i1 == 0 && dataTitle.push(item3.title || '');                        var colName = item3.field;                        var colValue = item1[colName];                        var templetFunc = item3.templet;                        //如果templet 方法不為空,使用templet方法進行值替換                        if(templetFunc != null) {                            colValue = templetFunc(item1);                        }                        vals.push(colValue);                    }                });            }            //為 js-excel 導(dǎo)出準備json數(shù)據(jù)            var tempStr = "";            for (var i = 0; i < vals.length; i++) {                if (i == 0) {                    tempStr = "\"" + dataTitle[i] + "\":" + "\"" + vals[i] + "\"";                } else {                    tempStr = tempStr + ",\"" + dataTitle[i] + "\":" + "\"" + vals[i] + "\"";                }            }            var tempLineJsonObjStr = "{" + tempStr + "}";            excelData.push(JSON.parse(tempLineJsonObjStr));            //dataMain.push(vals.join(','))        });        return excelData;    }    //Conan End    //表格導(dǎo)出    table.exportFile = function (id, data, type) {        data = data || table.clearCacheKey(table.cache[id]);        type = type || 'csv';        var config = thisTable.config[id] || {}            , textType = ({                csv: 'text/csv'                , xls: 'application/vnd.ms-excel'            })[type]            , alink = document.createElement("a");        //Conan Start        if (device.ie) return hint.error('IE_NOT_SUPPORT_EXPORTS');        if (type == 'csv') {            alink.href = 'data:' + textType + ';charset=utf-8,\ufeff' + encodeURIComponent(function () {                return table.prepareCSVDat1;           workBook.Sheets['Sheet1'] = XLSX.utils.table_to_sheet(jsonTable);            */            var excelJsonStr = table.prepareExcelData(data, id);            workBook.Sheets['Sheet1'] = XLSX.utils.json_to_sheet(excelJsonStr);            var xlsFilename = (config.title || 'table_' + (config.index || '')) + '.' + type;            saveAs(new Blob([changeData(XLSX.write(workBook, wopts))], { type: "application/vnd.ms-excel" }), xlsFilename);        }        //Conan End    };導(dǎo)出文件需要用到的方法 changeData, saveAs. 請在layui 之前引用。如放入app.js,然后再layui 之前引用。<script type="text/javascript" src="../../js/app.js" charset="utf-8"></script><script type="text/javascript" src="../../js/xlsx.full.min.js" charset="utf-8"></script><script type="text/javascript" src="../../lib/layui/layui.js" charset="utf-8"></script>function getFileName(filePath){    var pos=filePath.lastIndexOf("\\");    return filePath.substring(pos+1);  }function saveAs(obj, fileName) {//當然可以自定義簡單的下載文件實現(xiàn)方式     var tmpa = document.createElement("a");    tmpa.download = fileName || "下載";    tmpa.href = URL.createObjectURL(obj); //綁定a標簽    tmpa.click(); //模擬點擊實現(xiàn)下載    setTimeout(function () { //延時釋放        URL.revokeObjectURL(obj); //用URL.revokeObjectURL()來釋放這個object URL    }, 100);}function changeData(s) {    //如果存在ArrayBuffer對象(es6) 最好采用該對象    if (typeof ArrayBuffer !== 'undefined') {                //1、創(chuàng)建一個字節(jié)長度為s.length的內(nèi)存區(qū)域        var buf = new ArrayBuffer(s.length);                //2、創(chuàng)建一個指向buf的Unit8視圖,開始于字節(jié)0,直到緩沖區(qū)的末尾        var view = new Uint8Array(buf);                //3、返回指定位置的字符的Unicode編碼        for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;        return buf;    } else {        var buf = new Array(s.length);        for (var i = 0; i != s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF;        return buf;    }}

然后就可以在表格導(dǎo)出中點擊導(dǎo)出excel 試一下了。

到此,相信大家對“如何解決layUI導(dǎo)出到Excel時身份證號碼、銀行卡號顯示不正確的問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI