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面向对象、prototype、call()、apply()
May 14 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
Dec 10 Javascript
js操作checkbox遇到的问题解决
Jun 29 Javascript
javascript删除数组元素并且数组长度减小的简单实例
Feb 14 Javascript
javascript将异步校验表单改写为同步表单
Jan 27 Javascript
JavaScript中神奇的call()方法
Mar 12 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
Oct 09 Javascript
js仿淘宝商品放大预览功能
Mar 15 Javascript
vue的一个分页组件的示例代码
Dec 25 Javascript
JavaScript满天星导航栏实现方法
Mar 08 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
Jan 19 Javascript
详解Nuxt.js 实战集锦
Nov 19 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
PHP实现文件安全下载
2006/10/09 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
PHP分页类集锦
2014/11/18 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
用原生JavaScript实现jQuery的$.getJSON的解决方法
2013/05/03 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
原生js的数组除重复简单实例
2016/05/24 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
js实现城市级联菜单的2种方法
2017/06/23 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
vue - vue.config.js中devServer配置方式
2019/10/30 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
python打开网页和暂停实例
2014/09/30 Python
简单解决Python文件中文编码问题
2015/11/22 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
python实现蒙特卡罗方法教程
2019/01/28 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
Tensorflow 实现分批量读取数据
2020/01/04 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
python实现感知机模型的示例
2020/09/30 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
大学专科生推荐信范文
2013/11/23 职场文书
在校实习生求职信
2014/06/18 职场文书
红色旅游心得体会
2014/09/03 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
信仰纪录片观后感
2015/06/08 职场文书
2016年学校党支部创先争优活动总结
2016/04/05 职场文书