在前端开发中, 我们经常遇到产品提出过分的要求, 比如: 前端导出xlsx。。。。

没办法接到就要干

基于代码库如下:

npm i cnpm i xlsx-style

具体代码如下

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>导出</title><script src="./js/xlsx.full.min.js"></script>
</head><body><button onclick=" dow(jsono)">下载</button><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"}, { //测试数据"保质期临期预警(天)": "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"}];function dow(data, type = "xlsx") {// 00- 处理数据// 获取keslet keys = Object.keys(data[0]);// 创建第一列 列标题data.unshift({});keys.forEach(keyNmame => {data[0][keyNmame] = keyNmame;})// 00-1 处理数据方法 混合方法let tmpdata = {};data.map((v, i) => keys.map((k, j) => ({v: v[k],position: mygetCharCol(j + 1) + (i + 1) // 定位具体单元格}))).reduce((p, n) => {return p.concat(n);}).forEach((item, index) => {tmpdata[item.position] = { v: item.v }})// 01- 设置区域 还是属于处理数据// var outputPos = Object.keys(tmpdata); //设置区域,比如表格从A1到D10var tmpWB = {SheetNames: ['mySheet'], //保存的表标题Sheets: {'mySheet': Object.assign({},tmpdata, //内容{'!ref': outputPos[0] + ':' + outputPos[outputPos.length - 1] //设置填充区域 范围})}};// 02- 转字节流 //创建二进制对象写入转换好的字节流tmpDown = new Blob([s2ab(XLSX.write(tmpWB,{ bookType: type, bookSST: false, type: 'binary' }//这里的数据是用来定义导出的格式类型))], {type: ""});// 03- 下载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);}// dow(jsono);/*** 将数字十进制, 转成xlsx的横向坐标* 将指定的自然数转换为26进制表示。映射关系:[1-26] -> [A-Z]。* */function mygetCharCol(n) {let str = '', m = 0;if (n <= 26) {str = String.fromCharCode(64 + n); // 1-26  =>  A-Z} else {// 底层逻辑// str = String.fromCharCode(64 + x) + String.fromCharCode(64 + m);while (n > 0) {m = n % 26;str = String.fromCharCode(64 + m) + str;n = (n - m) / 26; // n 的结果就是 多少个n的倍数}}return str};/*** 字符串转字符流* */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;};</script>
</body>
</html>

最后

如果实在还不行的话就用我 封装好的api

包的地址如下https://download.csdn.net/download/dwp_wz/20031674

前端导出 xlsx文件相关推荐

  1. mac r 导出csv文件_R在Max OS进行导入和导出xlsx文件

    R作为一门为统计设计的语言,可以方便灵活的进行文件导入和导出,大多数数据格式包括,csv, xlsx, txt,还有来自其他统计工具的SAS, SPSS, Stata, 数据文件都可以方便的导入和导出 ...

  2. 解决前端导出excel文件,打开为乱码

    前端开发中,导入和导出文件是比较常见的业务场景,楼主在初次接触此类问题时,也在此卡了几天,好在问题最终也得以解决,废话不多说了直接上代码: <el-upload:on-error="u ...

  3. H5 通过exceljs,根据模板替换内容,导出xlsx文件

    安装模块 npm install exceljsnpm install weixin-js-sdk index.vue,下载模板,通过exceljs写入内容,并返回base64.二进制流 <te ...

  4. 前端导出后端文件的方法

    一般存在两种方式: 1,请求接口之后,后端返回文件路径,前端直接下载. 2,请求接口之后,后端以文件流的形式返回给前端,前端再下载到本地. 第一种方式: window.location.href = ...

  5. html访问xlsx文件,【html】xlsx文件实现预览,浏览器实现xlsx文件的预览,前端实现xlsx文件的预览...

    ===================================================== 实现xlsx文件预览的快速的解决方案,使用微软提供的接口地址,直接拼接自己文件的url即可 ...

  6. 前端导出excel文件带样式_vue前端使用xlsx导出数据到excel中--最简单的方式

    最新项目中需要将页面数据导出到excel中,首先想到的就是度娘,得到的结果都是千篇一律,答案都是你复制我我复制你的,虽然能解决问题,但是这个过程也太复杂. 既然无法改变,那就只好插手你的生活了. 废话 ...

  7. js 前端导出报错 格式不正确_vue项目前端导出word文件(bug解决)

    摘要:之前项目中导出价格表是由后端实现,前端只需要调用接口下载word即可,后来业务改变比较大,word模版需要一直改动,后端改起来相对麻烦,后来直接前端自己定义模版,实现下载word文档. 一.需要 ...

  8. vue项目前端导出xlsx表格带边框

    最近项目中要求不再通过发送请求导出excel表格了,于是在网上找了找方法,在这记录一下方便以后查阅 一.首先先在项目中安装这几个包 npm install xlsx --save npm instal ...

  9. vue-实战记录-前端导出excel文件、pdf文件、word文件

    一.excel文件导出 1.引入npm包 npm install --save table-xlsx @pengchen/xlsx 第三方包文档:https://pengchen96.github.i ...

  10. vue 插入word模板 项目_vue项目前端导出word文件(bug解决)

    摘要:之前项目中导出价格表是由后端实现,前端只需要调用接口下载word即可,后来业务改变比较大,word模版需要一直改动,后端改起来相对麻烦,后来直接前端自己定义模版,实现下载word文档. 一.需要 ...

最新文章

  1. 234. Palindrome Linked List - Easy
  2. 网络故障排除工具NeoTraceProTrial325
  3. 基于 Android NDK 的学习之旅----- C调用Java
  4. python语言实战-别找了,这是 Pandas 最详细教程了
  5. 去了新公司,物理通过
  6. HDU3388(二分+容斥原理)
  7. vue 中的动态传参和query传参
  8. Windows消息机制以及相关API
  9. UVa 10118 免费糖果(记忆化搜索+哈希)
  10. C经典100题(1)
  11. antd-vue 划上表格内容显示气泡框及提示内容
  12. java 时区 mysql 时区:时区在程序和数据库中的作用及其机制
  13. C / C++从键盘输入字符串,并求其长度
  14. 如何卸载奇安信天擎远程办公软件V10.0
  15. 谷歌雅虎将联手实行即时信息兼容性计划
  16. 提高个人效率的方法和工具
  17. 微信表情图像代表什么意思_微信表情包每个表情代表什么意思
  18. Longest Commen Prefix
  19. Netfilx Eureka
  20. 给ubuntu18.04系统内核升级rt-patch补丁

热门文章

  1. mpa和pis_扭矩换算mpa(压力与扭矩换算)
  2. 制作自己的ILSVRC2015 VID数据集的一些脚本以及流程
  3. _stdcall与_cdecl区别
  4. 中国第一代技术网红,阿里云P10技术专家褚霸:我只是一个程序员 。
  5. Python生成文档(PDF, HTML)
  6. IDEA热部署之JRebel破解附反向代理破解exe(安装)
  7. Linux下套接字详解(十)---epoll模式下的IO多路复用服务器
  8. dokuwiki之新增/删除页面(文章)(一)
  9. Mac上Chrome浏览器快捷键汇总
  10. STM32的函数ssert_param(IS_GPIO_ALL_PERIPH(GPIOx));