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 相关文章推荐
iframe 父窗口和子窗口相互的调用方法集锦
Dec 15 Javascript
js中定义一个变量并判断其是否为空的方法
May 13 Javascript
jquery中map函数遍历数组用法实例
May 18 Javascript
javascript实现判断鼠标的状态
Jul 10 Javascript
Bootstrap每天必学之导航条
Nov 27 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
Nov 20 Javascript
Vue自定义指令介绍(2)
Dec 08 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
Jul 19 Javascript
微信小程序常用简易小函数总结
Feb 01 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
Jul 31 Javascript
vue实现修改图片后实时更新
Nov 14 Javascript
javascript实现切割轮播效果
Nov 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
电脑硬件及电脑配置知识大全
2020/03/17 数码科技
可定制的PHP缩略图生成程式(需要GD库支持)
2007/03/06 PHP
请php正则走开
2008/03/15 PHP
php短域名转换为实际域名函数
2011/01/17 PHP
PHP在线生成二维码代码(google api)
2013/06/03 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
2013/07/05 PHP
PHP文件读取功能的应用实例
2015/05/08 PHP
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
[46:14]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
使用python开发vim插件及心得分享
2014/11/04 Python
使用Python生成XML的方法实例
2017/03/21 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
python读取图片任意范围区域
2019/01/23 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
2019/10/11 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
Ubuntu16.04安装python3.6.5步骤详解
2020/01/10 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
香港现代设计家具品牌:Ziinlife Furniture
2018/11/13 全球购物
美国亚洲时尚和美容产品的一站式网上商店:Stylevana
2019/09/05 全球购物
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
企业宣传策划方案
2014/05/29 职场文书
优秀应届生求职信
2014/06/16 职场文书
网络舆情信息简报
2015/07/21 职场文书
MySQL系列之十 MySQL事务隔离实现并发控制
2021/07/02 MySQL
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技