SheetJS的使用(js-xlsx)

使用纯前端的方式实现对excel表格的读取和导出功能

github地址:https://github.com/SheetJS/js-xlsx

学习地址:https://www.jianshu.com/p/74d405940305

1.导入功能实现

下载js-xlsx到dist复制出xlsx.full.min.js引入到页面中
然后通过FileReader对象读取文件利用js-xlsx转成json数据

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title><script src="http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js"></script></head><body><input type="file"onchange="importf(this)" /><div id="demo"></div><script>/*FileReader共有4种读取方法:1.readAsArrayBuffer(file):将文件读取为ArrayBuffer。2.readAsBinaryString(file):将文件读取为二进制字符串3.readAsDataURL(file):将文件读取为Data URL4.readAsText(file, [encoding]):将文件读取为文本,encoding缺省值为'UTF-8'*/var wb;//读取完成的数据var rABS = false; //是否将文件读取为二进制字符串function importf(obj) {//导入if(!obj.files) {return;}var f = obj.files[0];var reader = new FileReader();reader.onload = function(e) {var data = e.target.result;if(rABS) {wb = XLSX.read(btoa(fixdata(data)), {//手动转化type: 'base64'});} else {wb = XLSX.read(data, {type: 'binary'});}//wb.SheetNames[0]是获取Sheets中第一个Sheet的名字//wb.Sheets[Sheet名]获取第一个Sheet的数据document.getElementById("demo").innerHTML= JSON.stringify( XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]) );};if(rABS) {reader.readAsArrayBuffer(f);} else {reader.readAsBinaryString(f);}}function fixdata(data) { //文件流转BinaryStringvar o = "",l = 0,w = 10240;for(; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));return o;}</script></body></html>

2.导出功能的实现

同样引入js-xlsx

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title></title><script src="http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js"></script>
</head><body><button onclick="downloadExl(jsono)">导出</button><!--以下a标签不需要内容--><a href="" download="这里是下载的文件名.xlsx" id="hf"></a><script>var jsono = [{ //测试数据"保质期临期预警(天)": "adventLifecycle","商品标题": "title","建议零售价": "defaultPrice","高(cm)": "height","商品描述": "Description","保质期禁售(天)": "lockupLifecycle","商品名称": "skuName","商品简介": "brief","宽(cm)": "width","阿达": "asdz","货号": "goodsNo","商品条码": "skuNo","商品品牌": "brand","净容积(cm^3)": "netVolume","是否保质期管理": "isShelfLifeMgmt","是否串号管理": "isSNMgmt","商品颜色": "color","尺码": "size","是否批次管理": "isBatchMgmt","商品编号": "skuCode","商品简称": "shortName","毛重(g)": "grossWeight","长(cm)": "length","英文名称": "englishName","净重(g)": "netWeight","商品分类": "categoryId","这里超过了": 1111.0,"保质期(天)": "expDate"}];var tmpDown; //导出的二进制对象function downloadExl(json, type) {var tmpdata = json[0];json.unshift({});var keyMap = []; //获取keys//keyMap =Object.keys(json[0]);for (var k in tmpdata) {keyMap.push(k);json[0][k] = k;}var tmpdata = [];//用来保存转换好的json json.map((v, i) => keyMap.map((k, j) => Object.assign({}, {v: v[k],position: (j > 25 ? getCharCol(j) : String.fromCharCode(65 + j)) + (i + 1)}))).reduce((prev, next) => prev.concat(next)).forEach((v, i) => tmpdata[v.position] = {v: v.v});var outputPos = Object.keys(tmpdata); //设置区域,比如表格从A1到D10var tmpWB = {SheetNames: ['mySheet'], //保存的表标题Sheets: {'mySheet': Object.assign({},tmpdata, //内容{'!ref': outputPos[0] + ':' + outputPos[outputPos.length - 1] //设置填充区域})}};tmpDown = new Blob([s2ab(XLSX.write(tmpWB, {bookType: (type == undefined ? 'xlsx':type),bookSST: false, type: 'binary'}//这里的数据是用来定义导出的格式类型))], {type: ""}); //创建二进制对象写入转换好的字节流var href = URL.createObjectURL(tmpDown); //创建对象超链接document.getElementById("hf").href = href; //绑定a标签document.getElementById("hf").click(); //模拟点击实现下载setTimeout(function() { //延时释放URL.revokeObjectURL(tmpDown); //用URL.revokeObjectURL()来释放这个object URL}, 100);}function s2ab(s) { //字符串转字符流var buf = new ArrayBuffer(s.length);var view = new Uint8Array(buf);for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;return buf;}// 将指定的自然数转换为26进制表示。映射关系:[0-25] -> [A-Z]。function getCharCol(n) {let temCol = '',s = '',m = 0while (n > 0) {m = n % 26 + 1s = String.fromCharCode(m + 64) + sn = (n - m) / 26}return s}</script>
</body></html>

SheetJS---(js-xlsx)相关推荐

  1. vue 使用js XLSX读取 excel 转换日期格式

    前言 大家好! 今天遇到了vue 使用js XLSX读取 excel 转换日期格式的问题,做个记录 问题 今天写excel文件上传时,遇到了时间格式没有正确转换的问题 解决方式 借用了 项目中读取 e ...

  2. vue js xlsx 读取 本地 excel

    最近在写一个人力资源管理系统,主要目的是将本地的excel文件读取解析,将有效数据传到后台. 下文介绍流程,文末附有参考文章. 1.安装npm包xlsx yarn add xlsx 2.结合上传组件和 ...

  3. js xlsx自定义样式导出

    使用的技术 xlsx 用于解析和编写各种电子表格.比如excel.csv.html文件 xlsx-style 为xlsx库添加样式,比如字体颜色,大小,行宽等.但是只支持xlsx.xlsm.xlsb格 ...

  4. JS+xlsx.js实现录入excel表格数据随机点名

    娱乐小项目,做教学上课随机抽人用,因为班级较多,所以不想用数组的方式来进行存储,将excel表格的数据直接转换为JSON对象格式,再循环存入数组,通过数组下标随机数的方式,实现这样的一个效果. HTM ...

  5. js xlsx获取表头

    getHeaderRow(sheet) {const headers = []/* sheet['!ref']表示所有单元格的范围,例如从A1到F8则记录为 A1:F8*/const range = ...

  6. 大前端知识点和商业应用总结

    参考:http://www.itcast.cn/subject/webzly/?jingjia-02-chuanzhi-qianduan-xin-pc-html5%2520canvasjiaochen ...

  7. 纯前端读取excel (SheetJS js-xlsx.js框架)

    文章目录 介绍 兼容性 使用方法 实现思路 文件引用 代码示例及详解 开发注意 介绍 应项目需求需要做一个纯前端读取excel文件的功能.各方面评估框架后选择了SheetJS的xlsx.js. She ...

  8. xlsx.js 实现前端 table 数据导出并下载为 excel

    目录 需求 ① 加载 xlsx.js ② 引入 JS 代码 ③ 按钮绑定事件 结果 附源码 需求 在写一个 SSM 项目的时候需要添加 excel 数据导出的功能, 实质上也就是将从数据库中渲染到前端 ...

  9. js导出的xlsx无法打开_js-xlsx 导出表格至excel

    引入js文件 下载地址:链接: https://pan.baidu.com/s/1gdOl1HnTrM5mZgPgd5qeDQ 提取码: c8js 导入4个js文件 'js/xlsx.extendsc ...

  10. JS实现下载xlsx格式文件--js-xlsx

    之前写过关于JS上传xlsx文件,这回是关于下载的.用的技术还是js-xlsx,blob. 部分内容转至纯前端利用 js-xlsx 实现 Excel 文件导入导出功能示例 关于js-xlsx的下载,请 ...

最新文章

  1. ActivityRouter
  2. python做电脑软件-Python编程软件(专业电脑编程工具)V3.9.1 最新版
  3. OpenGL ES之GLSL实现索引绘制及渲染纹理和颜色混合
  4. java并发中ExecutorService的使用
  5. 矢量图标库如何引入html,Iconfont矢量图标库在网站中的使用方法
  6. eclipse.jsp文件放哪_来自小师弟的灵魂拷问之数据泵导出丢失的那些数据量去哪了?...
  7. 前端实习日记——高新兴科技集团
  8. jquery中如何获得$.ajax()事件返回的值
  9. 项目管理:CocoaPods建立私有仓库
  10. 易鲸捷数据库(EsgynDB)常用SQL
  11. Ambiguous mapping. Cannot map ‘fruitawcController‘ method
  12. Bitmap、CBitmap、HBITMAP以及BITMAP的相互转换
  13. 数模【Mathematica(安装、入门方法、基本计算、基本图形、创建互动模型、利用数据、幻灯片演示、完整实例)】
  14. dart-sass 和 node-sass 的区别
  15. 佳能数码相机,不能安装驱动程序
  16. Chart.js使用及ajax获取数据
  17. 数学建模中的ARMA模型和ARIMA模型的使用实例(含代码)
  18. 考研数据结构算法题总结
  19. 北方工业大学数据结构考研
  20. 通达OA web页面与精灵显示内容更新后不一致的问题

热门文章

  1. 山东大学软件学院数据结构(考试)——期末考试回忆版
  2. MySQL 系统表损坏导致xtrabackup备份失败Cannot open filepath
  3. 基于三极管的声控LED电路/光立方设计方案(无需单片机)
  4. python实现通过URL下载图片到本地服务器
  5. 《设计模式》——里氏替换原则
  6. 侯捷C++课程笔记02: 面向对象高级编程(下)
  7. (转)网站域名大全全全(供方便查找)
  8. PBOOTCMS红色教育留学咨询企业网站模板(PC+WAP)
  9. 《科学工程技术、技术到学术的升级演变》
  10. 可以替代百度统计工具Matomo,小睿部署实战!看完你也会了哦!