js导出Excel表格超出26位英文字符的解决方法ES6


Posted in Javascript onNovember 15, 2017

这个需要对Excel表格的表头编码规则有所了解,目前示例代码只扩展到52个字段

/**
*json数据导入导出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
  }))
  // 转换成 worksheet 需要的结构
  .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)
  })))
  // 对刚才的结果进行降维处理(二维数组变成一维数组)
  .reduce((prev, next) => prev.concat(next))
  // 转换成 worksheet 需要的结构
  .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];
// 构建 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就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
可以文本显示的公告栏的js代码
Mar 11 Javascript
jquery 表单下所有元素的隐藏
Jul 25 Javascript
JavaScript写的一个自定义弹出式对话框代码
Jan 17 Javascript
关于juqery radio写法的兼容性问题(新老版本jquery)
Jun 14 Javascript
javascript与webservice的通信实现代码
Dec 25 Javascript
灵活的理解JavaScript中的this指向
Feb 25 Javascript
jQuery给div,Span, a ,button, radio 赋值与取值
Jun 24 Javascript
jQuery实现页面点击后退弹出提示框的方法
Aug 24 Javascript
layui前段框架日期控件使用方法详解
May 19 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
Jun 19 Javascript
纯JS实现简单的日历
Jun 26 Javascript
springboot+vue实现文件上传下载
Nov 17 Vue.js
bootstrap paginator分页插件的两种使用方式实例详解
Nov 14 #Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
Nov 14 #Javascript
JavaScript函数绑定用法实例分析
Nov 14 #Javascript
cordova入门基础教程及使用中遇到的一些问题总结
Nov 14 #Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
Nov 14 #Javascript
JS中图片压缩的方法小结
Nov 14 #Javascript
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
Nov 14 #jQuery
You might like
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
jquery让指定的元素闪烁显示的方法
2015/03/17 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
jquery实现右侧栏菜单选择操作
2016/03/04 Javascript
Vue响应式原理详解
2017/04/18 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
javascript实现小型区块链功能
2019/04/03 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
jQuery Ajax async=&gt;false异步改为同步时,解决导致浏览器假死的问题
2019/07/22 jQuery
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
Python函数返回不定数量的值方法
2019/01/22 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
Pycharm最常用的快捷键及使用技巧
2020/03/05 Python
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
入党申请人的自我鉴定
2013/12/01 职场文书
安全教育实施方案
2014/03/02 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
2015年数学教研工作总结
2015/07/22 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
2016教师节感恩话语
2015/12/09 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书
创业计划书之溜冰场
2019/10/25 职场文书