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打印网页部分内容的脚本
Nov 17 Javascript
jquer之ajaxQueue简单实现代码
Sep 15 Javascript
禁止你的左键复制实用技巧
Jan 04 Javascript
在JavaScript并非所有的一切都是对象
Apr 11 Javascript
js取float型小数点后两位数的方法
Jan 18 Javascript
js取值中form.all和不加all的区别介绍
Jan 20 Javascript
JavaScript 七大技巧(二)
Dec 13 Javascript
一个仿微博登陆邮箱提示框js开发案例
Jul 28 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
Sep 18 Javascript
详解vue mixins和extends的巧妙用法
Dec 20 Javascript
electron中使用bootstrap的示例代码
Nov 06 Javascript
微信小程序获取当前时间及星期几的实例代码
Sep 20 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 阴历-农历-转换类代码
2012/01/16 PHP
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
PHP中overload与override的区别
2017/02/13 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
js的.innerHTML = &quot;&quot;IE9下显示有错误的解决方法
2013/09/16 Javascript
javascript实现的简单计时器
2015/07/19 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
js仿QQ邮箱收件人选择与搜索功能
2017/02/10 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
React 使用browserHistory项目访问404问题解决
2018/06/01 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
微信小程序封装的HTTP请求示例【附升级版】
2019/05/11 Javascript
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
python递归全排列实现方法
2018/08/18 Python
python opencv实现图像边缘检测
2019/04/29 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
Python 根据日志级别打印不同颜色的日志的方法示例
2019/08/08 Python
Jupyter Notebook添加代码自动补全功能的实现
2021/01/07 Python
让IE支持HTML5的方法
2012/12/11 HTML / CSS
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
韩国流行时尚女装网站:Dintchina(中文)
2018/07/19 全球购物
Seavenger官网:潜水服、浮潜、靴子和袜子
2020/03/05 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
金融专业个人求职信
2013/09/22 职场文书
技术总监管理职责范本
2014/03/06 职场文书
高质量“欢迎词”
2019/04/03 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP