js導(dǎo)出Excel表格超出26位英文字符的解決方法ES6
更新時(shí)間:2017年11月15日 08:28:05 作者:風(fēng)雨后彩虹
下面小編就為大家?guī)硪黄猨s導(dǎo)出Excel表格超出26位英文字符的解決方法ES6。具有很好的參考價(jià)值。一起跟隨小編過來看看吧,希望對(duì)大家有所幫助
這個(gè)需要對(duì)Excel表格的表頭編碼規(guī)則有所了解,目前示例代碼只擴(kuò)展到52個(gè)字段
/** *json數(shù)據(jù)導(dǎo)入導(dǎo)出Excel表格示例代碼 * / var array_utils = require('./utils-array') var XLSX = require("xlsx"); module.exports = { writeExcel : function (headers,data,file,callback) { if(data.length ==0){ var obj = {} for(var v of headers){ obj[v] = '' } data.push(obj) } _writeExcel(headers,data,file,callback) }, /** * 獲取excel原始信息 * @param path 文件路徑 */ info : function(path){ return _info(path) }, /** * 格式化excel原始信息 * @param path 文件路徑 */ formate_info : function (path) { return info_formate_info(path).formate }, info_formate_info : function (path) { return info_formate_info(path) } } var _info = function(path) { var k = XLSX.readFile(path, {type: 'base64'}); var result = {} k.SheetNames.forEach(function(sheetName) { var worksheet = k.Sheets[sheetName]; result[sheetName] = XLSX.utils.sheet_to_json(worksheet); }); return result } var info_formate_info = function(path){ var info = _info(path) var result = {} for(var value in info){ result[value] = {} } for(var key_info in info ){ var array = info[key_info] if(array_utils.isArray(array) || array.length>0){ var keys_array = Object.keys(array[0]) var obj = {} for(var value of keys_array){ obj[value] = [] } for( var key in obj ){ var subject_clone = JSON.parse(JSON.stringify(array)) subject_clone.filter( (v)=>{ for(var k in v){ if(k!=key){ delete v[k] } } return v; }) var subject_key_value = Array.from(array_utils.arrayQC(subject_clone),v => v[key] ) var obA = [] for(var v of subject_key_value){ var obk = { id : null, v : v } for(var ke in keys_array){ var thisIndex = keys_array.findIndex(x=>x==keys_array[ke]) var currentIndex = keys_array.findIndex(x=>x==key) if( thisIndex < currentIndex){ try { var thisObj = array.find(x=>x[ key ] == v ) obk[keys_array[ke]] = thisObj[ keys_array[ke] ] }catch (e){ console.error(e) } } } obA.push(obk) } obj[key] = obA } result[key_info]= obj } } return { info : info, formate : result } } var _writeExcel = function (headers,data,file,callback) { var _headers = headers var _data = data; var headers = _headers // 為 _headers 添加對(duì)應(yīng)的單元格位置 .map((v, i) => Object.assign({}, { v: v, position:num(i)+1 })) // 轉(zhuǎn)換成 worksheet 需要的結(jié)構(gòu) .reduce((prev, next) => Object.assign({}, prev, {[next.position]: {v: next.v}}), {}); var data = _data .map((v, i) => _headers.map((k, j) => Object.assign({}, { v: v[k], position:num(j) + (i+2) }))) // 對(duì)剛才的結(jié)果進(jìn)行降維處理(二維數(shù)組變成一維數(shù)組) .reduce((prev, next) => prev.concat(next)) // 轉(zhuǎn)換成 worksheet 需要的結(jié)構(gòu) .reduce((prev, next) => Object.assign({}, prev, {[next.position]: {v: next.v}}), {}); // 合并 headers 和 data // console.log("測(cè)試data",data) var output = Object.assign({}, headers, data); // 獲取所有單元格的位置 var outputPos = Object.keys(output); // 計(jì)算出范圍 var ref = outputPos[0] + ':' + outputPos[outputPos.length - 1]; // 構(gòu)建 workbook 對(duì)象 var wb = { SheetNames: ['Sheet1'], Sheets: { 'Sheet1': Object.assign({}, output, { '!ref': ref }) } }; // 導(dǎo)出 Excel XLSX.writeFileAsync( file , wb,function (err) { callback(err) }); } //定位Excel位置 var num=function(i){ var n=parseInt(i+65) if(n>90){ n=String.fromCharCode(65)+String.fromCharCode(i+39) return n }else { n=String.fromCharCode(n) return n } }
以上這篇js導(dǎo)出Excel表格超出26位英文字符的解決方法ES6就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript詳解使用Promise處理回調(diào)地獄的兩種方法
這篇文章主要介紹了JavaScript詳解使用Promise處理回調(diào)地獄的兩種方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-11-11深入理解javascript學(xué)習(xí)筆記(一) 編寫高質(zhì)量代碼
編寫高質(zhì)量JavaScript的一些要素,例如避免全局變量,使用單變量聲明,在循環(huán)中預(yù)緩存length(長(zhǎng)度),遵循代碼閱讀,以及更多2012-08-08JavaScript中檢測(cè)變量是否存在遇到的一些問題
要檢測(cè)某一變量是否存在,雖然簡(jiǎn)單但是也要細(xì)心,下面整理了幾點(diǎn),遇到類似問題的朋友可以參考下2013-11-11IE與firefox下Dhtml的一些區(qū)別小結(jié)
IE與Mozilla下Dhtml的一些區(qū)別小結(jié)2009-12-12JS實(shí)現(xiàn)仿UC瀏覽器前進(jìn)后退效果的實(shí)例代碼
這篇文章主要介紹了JS實(shí)現(xiàn)仿UC瀏覽器前進(jìn)后退效果的實(shí)例代碼,實(shí)現(xiàn)此功能前需要先測(cè)試下瀏覽器,具體實(shí)例代碼,大家參考下本文2017-07-07