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 相关文章推荐
关于js获取radio和select的属性并控制的代码
May 12 Javascript
jquery ready(fn)事件使用介绍
Aug 21 Javascript
js showModalDialog弹出窗口实例详解
Jan 07 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
May 11 Javascript
浅谈JavaScript字符串与数组
Jun 03 Javascript
Bootstrap表单组件教程详解
Apr 26 Javascript
JavaScript装饰器函数(Decorator)实例详解
Mar 30 Javascript
原生JS+Canvas实现五子棋游戏
May 28 Javascript
jquery无缝图片轮播组件封装
Nov 25 jQuery
vue单页面在微信下只能分享落地页的解决方案
Apr 15 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
Apr 19 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
Sep 04 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边学边教》(02.Apache+PHP环境配置――上篇)
2006/12/13 PHP
PHP 实例化类的一点摘记
2008/03/23 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
php post换行的方法
2020/02/03 PHP
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
2014/05/14 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
js实现表格数据搜索
2020/08/09 Javascript
js实现Element中input组件的部分功能并封装成组件(实例代码)
2021/03/02 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
Python异常处理总结
2014/08/15 Python
python模拟鼠标拖动操作的方法
2015/03/11 Python
python中pass语句用法实例分析
2015/04/30 Python
python使用KNN算法手写体识别
2018/02/01 Python
python实现SOM算法
2018/02/23 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
python调用摄像头拍摄数据集
2019/06/01 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
8段用于数据清洗Python代码(小结)
2019/10/31 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
大学生应聘自荐信
2013/10/11 职场文书
特色蛋糕店创业计划书
2014/01/28 职场文书
大学生活动策划方案
2014/02/10 职场文书
大学生交通专业求职信
2014/09/01 职场文书
员工保密协议书
2014/09/27 职场文书
python中字符串String及其常见操作指南(方法、函数)
2022/04/06 Python
Linux安装Docker详细教程
2022/07/07 Servers
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技