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 相关文章推荐
扩展easyui.datagrid,添加数据loading遮罩效果代码
Nov 02 Javascript
javascript设计模式 接口介绍
Jul 24 Javascript
jquery高级编程的最佳实践详解
Mar 23 Javascript
浅谈Node.js中的定时器
Jun 18 Javascript
jQuery on()绑定动态元素出现的问题小结
Feb 19 Javascript
JavaScript html5 canvas绘制时钟效果
Mar 01 Javascript
js拖拽的原型声明和用法总结
Apr 04 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
Oct 10 Javascript
jQuery列表检索功能实现代码
Jul 17 jQuery
小程序云开发之用户注册登录
May 18 Javascript
微信小程序如何获取群聊的openGid以及名称详解
Jul 17 Javascript
node事件循环和process模块实例分析
Feb 14 Javascript
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
微信公众号之主动给用户发送消息功能
2019/06/22 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
jQuery实现可关闭固定于底(顶)部的工具条菜单效果
2015/11/06 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
详解jQuery中的getAll()和cleanData()
2019/04/15 jQuery
layer 刷新某个页面的实现方法
2019/09/05 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
React实现阿里云OSS上传文件的示例
2020/08/10 Javascript
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
python编程开发之日期操作实例分析
2015/11/13 Python
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
python 常用的基础函数
2018/07/10 Python
纽约手袋品牌:KARA
2018/03/18 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
物流管理毕业生自荐信
2013/10/24 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
服务整改报告
2014/11/06 职场文书
企业整改报告范文
2014/11/08 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
2015年宣传部部长竞选演讲稿
2014/11/28 职场文书
会议邀请函
2015/01/30 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
python实现简易名片管理系统
2021/04/11 Python