| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 | var  xlsxUtils = {    Binary: {        fixdata(data) { //文件流转BinaryString            var o = "",                l = 0,                w = 10240;            for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));            o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));            return o;        },        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;        }    },    _wb: null,    _rABS: false,    /**     * @desc  导入根据文件     * @param {File} f 文件     * @param {Function} c 回调     * @return {Object} 回调值     */    import(f, c) {        this.wb = null;        var reader = new FileReader();        reader.onload = function (e) {            var data = e.target.result;            xlsxUtils._wb = xlsxUtils._rABS ? XLSX.read(btoa(xlsxUtils.Binary.fixdata(data)), { type: 'base64' }) : XLSX.read(data, { type: 'binary' });            if (typeof c == "function") { c(xlsxUtils._wb); }        };        if (xlsxUtils._rABS) {            reader.readAsArrayBuffer(f);        } else {            reader.readAsBinaryString(f);        }    },    /**     * @desc  根据表Sheet名获取数据     * @param {String} name     * @return {Object}     */    getSheetByName(name, opt) {//        return XLSX.utils.sheet_to_json(xlsxUtils._wb.Sheets[name], opt);    },    /**     * @desc  根据表Sheet索引获取数据     * @param {Number} index     * @return {Object}     */    getSheetByIndex(index = 0, opt) {        return xlsxUtils.getSheetByName(xlsxUtils._wb.SheetNames[index], opt);    },    /**     * @desc 导出     * @param {Array} data 数据{title1:dataList,title2:dataList....}     * @param {String} type     * @return {Blob}     */    export(data, type) {        var tmpWB = null;        for (var title in data) {            var tmpdata = xlsxUtils.format2Sheet(data[title]);            tmpWB = xlsxUtils.format2WB(tmpdata, title, tmpWB);        }        return xlsxUtils.format2Blob(tmpWB, type);    },    /**     * 从数据数组或对象中根据key生成相同key值的对象     * @param {Object|Array} data     * @return {Object}     */    readDataHead(data) {        var o = {}, d = Array.isArray(data) ? Object.keys(data[0]) : data; for (var i of d) o[i] = i;        return o;    },    /**     * @desc 格式化数据为Sheet格式     * @param {Array} json 数据     * @param {Number} n 列偏移     * @param {Number} r 行偏移     * @param {Array} keyMap 对象键数组     * @param {Function|Boolean} t 数据     */    format2Sheet(json, n, r, keyMap, t) {        keyMap = keyMap || Object.keys(json[0]);        var types = (t == undefined ? ((v) => (({ "number": "n", undefined: "s", "boolean": "b","string":"s" })[typeof v])||"s") : t);        n = n || 0;        r = r || 0;        var tmpdata = {};//用来保存转换好的json        var t1 = json.map((v, i) => keyMap.map((k, j) => Object.assign({}, {            v: v[k],            position: ((j + n) > 25 ? xlsxUtils.getCharCol((j + n)) : String.fromCharCode(65 + (j + n))) + (i + 1 + r),        }))).reduce((prev, next) => prev.concat(next)).forEach((v, i) => tmpdata[v.position] = {            v: v.v,            t: types?types(v.v):"s"        });        return tmpdata;    },    /**     * @desc 格式化数据为Sheet格式     * @param {Array} sheetData     * @param {String} title     * @param {Object} wb     * @param {Object} ref     */    format2WB(sheetData, title, wb, ref) {        title = title || "mySheet";        var outputPos = Object.keys(sheetData);        if (!wb) wb = { Sheets: {}, SheetNames: [] };        wb.SheetNames.push(title);        wb.Sheets[title] = Object.assign({}, sheetData, {            '!ref': ref || (outputPos[0] + ':' + outputPos.reverse().find(_=>_.indexOf("!")==-1))//设置填充区域        });        return wb;    },    /**     * @desc 将xlsx Workbook 转为blob     * @param {Array} wb     * @param {String} type 类型     */    format2Blob(wb, type) {        return new Blob([xlsxUtils.Binary.s2ab(XLSX.write(wb,            { bookType: (type == undefined ? 'xlsx' : type), bookSST: false, type: 'binary' }//这里的数据是用来定义导出的格式类型        ))], { type: "" });    },    /**     * @desc 匹配单元格对应的标识     * @param {Number} n     */    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    },};
 |