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 相关文章推荐
jQuery 行背景颜色的交替显示(隔行变色)实现代码
Dec 13 Javascript
JQuery.closest(),parent(),parents()寻找父结点
Feb 17 Javascript
js借助ActiveXObject实现创建文件
Sep 29 Javascript
js获取checkbox复选框选中的选项实例
Aug 24 Javascript
Flexigrid在IE下不显示数据的有效处理方法
Sep 04 Javascript
实例讲解JavaScript中的this指向错误解决方法
Jun 13 Javascript
js精准的倒计时函数分享
Jun 29 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
Jul 25 Javascript
纯js实现页面返回顶部的动画(超简单)
Aug 10 Javascript
angularJs中$scope数据序列化的实例
Sep 30 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
Jun 17 Javascript
node+vue实现文件上传功能
May 28 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
MySQL数据源表结构图示
2008/06/05 PHP
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
2013/06/19 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
关于JavaScript中string 的replace
2013/04/12 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
jQuery菜单插件用法实例
2015/07/25 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
2016/12/16 Javascript
详解使用nvm管理多版本node的方法
2017/08/30 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
PYTHON基础-时间日期处理小结
2018/05/05 Python
python输出带颜色字体实例方法
2019/09/01 Python
Django中modelform组件实例用法总结
2020/02/10 Python
python字符串下标与切片及使用方法
2020/02/13 Python
PyTorch实现重写/改写Dataset并载入Dataloader
2020/07/14 Python
上海期货面试题
2014/01/31 面试题
巧克力蛋糕店创业计划书
2014/01/14 职场文书
业务部主管岗位职责
2014/01/29 职场文书
毕业生自荐书
2014/02/03 职场文书
投资合作协议书范本
2014/04/17 职场文书
测控技术自荐信
2014/06/05 职场文书
黄埔军校观后感
2015/06/10 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
2019年最新借条范本!
2019/07/08 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers