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 相关文章推荐
在IE下获取object(ActiveX)的Param的代码
Sep 15 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
Feb 05 Javascript
浅析JavaScript中的同名标识符优先级
Dec 06 Javascript
node.js中的path.delimiter方法使用说明
Dec 09 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
Mar 01 Javascript
浅谈javascript属性onresize
Apr 20 Javascript
jQuery实现的简单拖拽功能示例
Sep 13 Javascript
关于RequireJS的简单介绍即使用方法
Oct 20 Javascript
纯JS单页面赛车游戏制作代码分享
Mar 03 Javascript
vue使用Axios做ajax请求详解
Jun 07 Javascript
详解如何使用nvm管理Node.js多版本
May 06 Javascript
详解JVM系列之内存模型
Jun 10 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写的serv-u的web申请账号的程序
2006/10/09 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
详解如何实现Laravel的服务容器的方法示例
2019/04/15 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
JS动态添加option和删除option(附实例代码)
2013/04/01 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
javascript实现实时输出当前的时间
2015/04/27 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
js断点调试经验分享
2017/12/08 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
vue中实现点击空白区域关闭弹窗的两种方法
2020/12/30 Vue.js
Python标准库之itertools库的使用方法
2017/09/07 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
Python实现随机创建电话号码的方法示例
2018/12/07 Python
python读取并写入mat文件的方法
2019/07/12 Python
python实现图片压缩代码实例
2019/08/12 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
Python 复平面绘图实例
2019/11/21 Python
python如何控制进程或者线程的个数
2020/10/16 Python
python regex库实例用法总结
2021/01/03 Python
国际象棋商店:The Chess Store
2018/07/09 全球购物
laravel使用redis队列实例讲解
2021/03/23 PHP
文秘专业个人求职信
2013/12/22 职场文书
《美丽的黄昏》教学反思
2014/02/28 职场文书
村干部培训班主持词
2014/03/28 职场文书
环保倡议书格式范文
2014/05/14 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
2014年教育工作总结
2014/11/26 职场文书
幼师中班个人总结
2015/02/12 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
导游词之蜀山胜景瓦屋山
2019/11/29 职场文书
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android