js導出Excel表格超出26位英文字符的解決方法ES6
更新時間:2017年11月15日 08:28:05 作者:風雨后彩虹
下面小編就為大家?guī)硪黄猨s導出Excel表格超出26位英文字符的解決方法ES6。具有很好的參考價值。一起跟隨小編過來看看吧,希望對大家有所幫助
這個需要對Excel表格的表頭編碼規(guī)則有所了解,目前示例代碼只擴展到52個字段
/**
*json數(shù)據(jù)導入導出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 添加對應的單元格位置
.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)
})))
// 對剛才的結(jié)果進行降維處理(二維數(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("測試data",data)
var output = Object.assign({}, headers, data);
// 獲取所有單元格的位置
var outputPos = Object.keys(output);
// 計算出范圍
var ref = outputPos[0] + ':' + outputPos[outputPos.length - 1];
// 構(gòu)建 workbook 對象
var wb = {
SheetNames: ['Sheet1'],
Sheets: {
'Sheet1': Object.assign({}, output, { '!ref': ref })
}
};
// 導出 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導出Excel表格超出26位英文字符的解決方法ES6就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript詳解使用Promise處理回調(diào)地獄的兩種方法
這篇文章主要介紹了JavaScript詳解使用Promise處理回調(diào)地獄的兩種方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-11-11
深入理解javascript學習筆記(一) 編寫高質(zhì)量代碼
編寫高質(zhì)量JavaScript的一些要素,例如避免全局變量,使用單變量聲明,在循環(huán)中預緩存length(長度),遵循代碼閱讀,以及更多2012-08-08
IE與firefox下Dhtml的一些區(qū)別小結(jié)
IE與Mozilla下Dhtml的一些區(qū)別小結(jié)2009-12-12

