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 相关文章推荐
javascript开发随笔一 preventDefault的必要
Nov 25 Javascript
用js实现trim()的解决办法
Apr 16 Javascript
自己动手写的javascript前端等待控件
Oct 30 Javascript
js实现动态加载脚本的方法实例汇总
Nov 02 Javascript
jQuery实现简单的网页换肤效果示例
Sep 18 Javascript
javascript入门之string对象【新手必看】
Nov 22 Javascript
基于jQuery实现的查看全文功能【实用】
Dec 11 Javascript
Vue中正确使用jQuery的方法
Oct 30 jQuery
Vue.js 时间转换代码及时间戳转时间字符串
Oct 16 Javascript
详解vue使用插槽分发内容slot的用法
Mar 28 Javascript
js作用域和作用域链及预解析
Apr 11 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
Jul 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
咖啡是不是喝了会上瘾?咖啡是必须品吗!
2021/03/04 新手入门
lib.utf.js
2007/08/21 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
二叉树的非递归后序遍历算法实例详解
2014/02/07 Javascript
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
vue2项目使用sass的示例代码
2017/06/28 Javascript
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
简述JS控制台的使用
2018/07/15 Javascript
详解vue中axios的封装
2018/07/18 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
js实现登录拖拽窗口
2020/02/10 Javascript
zbar解码二维码和条形码示例
2014/02/07 Python
Python输出9*9乘法表的方法
2015/05/25 Python
Django验证码的生成与使用示例
2017/05/20 Python
Python时间戳使用和相互转换详解
2017/12/11 Python
python对矩阵进行转置的2种处理方法
2019/07/17 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
新闻专业个人自我评价
2013/09/21 职场文书
求职信格式范本
2013/11/15 职场文书
模具数控专业自荐信
2014/01/27 职场文书
社区八一活动方案
2014/02/03 职场文书
访谈节目策划方案
2014/05/15 职场文书
开学典礼策划方案
2014/05/28 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
APP界面设计技巧和注意事项
2022/04/29 杂记