vue excel上传预览和table内容下载到excel文件中


Posted in Javascript onDecember 10, 2019

excel上传预览

vue excel上传预览和table内容下载到excel文件中

这里会用到

npm i element-ui
npm i xlsx

在vue的template中写上,排版和css看个人需求

<div> 选择文件
 <input type="file" d="file_input" @change="importf(this)" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" />
</div>
<div @click="fileBtn">上传到服务器</div>
<el-table class="listTable_ele" :data="listTable" stripe height="250" style="width:100%">
 <el-table-column prop="name" label="员工姓名" width="180" align="center"></el-table-column>
 <el-table-column prop="department" label="职务/部门" align="center"></el-table-column>
</el-table>

vue的js中写上

export default {
 data() {
 return {
  listTable: []
   }
 },
 methods:{
 // 上传预览
   importf(obj) {
    let that= this;
    let inputDOM = this.$refs.inputer; // 通过DOM取文件数据
    this.file = event.currentTarget.files[0];
    var rABS = false; //是否将文件读取为二进制字符串
    var f = this.file;
    var reader = new FileReader();
    //if (!FileReader.prototype.readAsBinaryString) {
    FileReader.prototype.readAsBinaryString = function(f) {
     var binary = "";
     var rABS = false; //是否将文件读取为二进制字符串
     var pt = this;
     var wb; //读取完成的数据
     var outdata;
     var reader = new FileReader();
     reader.onload = function(e) {
      var bytes = new Uint8Array(reader.result);
      var length = bytes.byteLength;
      for (var i = 0; i < length; i++) {
       binary += String.fromCharCode(bytes[i]);
      }
      var XLSX = require("xlsx");
      if (rABS) {
       wb = XLSX.read(btoa(fixdata(binary)), {
        //手动转化
        type: "base64"
       });
      } else {
       wb = XLSX.read(binary, {
        type: "binary"
       });
      }
      // outdata就是你想要的东西 excel导入的数据
      outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
      // excel 数据再处理
      let arr = [];
      // 这里需要注意名字一定要和excel的内容的文字对上
      outdata.map(v => {
       let obj = {};
       obj.name = v.姓名;
       obj.department = v.部门;
       arr.push(obj);
      });
      // 放入到element的table中显示出来
      that.listTable = arr;
     };
     reader.readAsArrayBuffer(f);
    };
    if (rABS) {
     reader.readAsArrayBuffer(f);
    } else {
     reader.readAsBinaryString(f);
    }
    // 这里补个时间问题,excel的时间格式是序列号,如果用的上需要转化
    // 需要在这个位置加上调用方法
    // outdata.map(v => {
    //  let obj = {};
    //  obj.time= ExcelDateToJSDate(v.时间);
    //  arr.push(obj);
    // });
    // 这个方法暂时是目前找的比较好,日期不是很精确,精确不到秒(暂未查出小时和分钟出问题),excel日期序列号装换成时间格式,
    // function ExcelDateToJSDate(serial) {
    //  let utc_days = Math.floor(serial - 25569);
    //  let utc_value = utc_days * 86400;
    //  let date_info = new Date(utc_value * 1000);
    //  let fractional_day = serial - Math.floor(serial) + 0.0000001;
    //  let total_seconds = Math.floor(86400 * fractional_day);
    //  let seconds = total_seconds % 60;
    //  total_seconds -= seconds;
    //  let hours = Math.floor(total_seconds / (60 * 60));
    //  let minutes = Math.floor(total_seconds / 60) % 60;
    //  let ctime=new Date(date_info.getFullYear(), date_info.getMonth(), date_info.getDate(), hours, minutes, seconds);
    // 这是时间拼接,需要什么格式可以自行拼接
    //  return (ctime.getFullYear()+'-'+(ctime.getMonth()+1)+'-'+ctime.getDate());
    // }
   },
   // 上传按钮
   fileBtn() {
   //上传这里可以分两种,一种是直接获取input的文件上传给后端,一种是我们已经解析了excel所以只要把listTable数组传给后端
   //两种方法都可行,看自己需求
   }
 }
}

下面是excel上传文件模板

vue excel上传预览和table内容下载到excel文件中

table内容下载到excel文件中

因为方式不一样,需要在安装

npm i file-saver

在vue的script中引入

import XLSX from "xlsx";
import FileSaver from "file-saver";

内容导出,写在vue的methods中

downBtn() {
 // 获取table的dom元素
 let vv = XLSX.utils.table_to_book(document.getElementById("tableExcel"));
 let vbouts = XLSX.write(vv, {
  bookType: "xlsx",
  bookSST: true,
  type: "array"
 });
 try {
  FileSaver.saveAs(
   // 这是下载的excel文件名 
   new Blob([vbouts], { type: "application/octet-stream" }),
   "员工表.xlsx"
  );
 } catch (e) {
  if (typeof console !== "undefined") console.log(e, vbouts);
 }
 return vbouts;
}

总结

以上所述是小编给大家介绍的vue excel上传预览和table内容下载到excel文件中,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
Javascript中的isNaN函数使用说明
Nov 10 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
Apr 02 Javascript
如何调试异步加载页面里包含的js文件
Oct 30 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
Apr 13 Javascript
原生JS实现旋转木马式图片轮播插件
Apr 25 Javascript
JavaScript的ExtJS框架中表格的编写教程
May 21 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
May 25 Javascript
canvas实现流星雨的背景效果
Jan 13 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
Mar 30 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
Aug 30 Javascript
Vue实现表格中对数据进行转换、处理的方法
Sep 06 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
Apr 08 Javascript
JS实现点餐自动选择框(案例分析)
Dec 10 #Javascript
原生js实现随机点餐效果
Dec 10 #Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
Dec 10 #Javascript
JavaScript多种滤镜算法实现代码实例
Dec 10 #Javascript
vue仿淘宝滑动验证码功能(样式模仿)
Dec 10 #Javascript
vue实现随机验证码功能(完整代码)
Dec 10 #Javascript
vue实现短信验证码登录功能(流程详解)
Dec 10 #Javascript
You might like
PHP中array_slice函数用法实例详解
2014/11/25 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
2019/07/08 PHP
JS正则表达式验证数字代码
2014/01/28 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
2014/02/11 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
jQuery实现的仿百度分页足迹效果代码
2015/10/30 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
jQuery快速实现商品数量加减的方法
2017/02/06 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
Python发送Email方法实例
2014/08/21 Python
python使用datetime模块计算各种时间间隔的方法
2015/03/24 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2015/12/08 Python
Python Flask基础教程示例代码
2018/02/07 Python
分析Python读取文件时的路径问题
2018/02/11 Python
Python后台开发Django会话控制的实现
2019/04/15 Python
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
毕业生物理教师求职信
2013/10/17 职场文书
竞聘书怎么写,如何写?
2014/03/31 职场文书
室内趣味活动方案
2014/08/24 职场文书
重阳节主题班会
2015/08/17 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
护理自荐信
2019/05/14 职场文书
python编写函数注意事项总结
2021/03/29 Python
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python