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 树形递归实例代码
May 18 Javascript
Javascript基础教程之数据类型 (数值 Number)
Jan 18 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
Apr 07 Javascript
js获取表格的行数和列数的方法
Oct 23 Javascript
jQuery中cookie插件用法实例分析
Dec 04 Javascript
ionic 上拉菜单(ActionSheet)实例代码
Jun 06 Javascript
老生常谈Javascript中的原型和this指针
Oct 09 Javascript
浅谈Node异步编程的机制
Oct 18 Javascript
微信小程序实现折叠展开效果
Jul 19 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
Mar 04 Javascript
微信小程序复选框实现多选一功能过程解析
Feb 14 Javascript
关于javascript中的promise的用法和注意事项(推荐)
Jan 15 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 mkdir()无写权限的问题解决方法
2014/06/19 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
laravel 自定义常量的两种方案
2019/10/14 PHP
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
JavaScript位置参数实现原理及过程解析
2020/09/14 Javascript
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python使用PyGame模块播放声音的方法
2015/05/20 Python
python2.7安装图文教程
2018/03/13 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
Python使用tkinter实现小时钟效果
2021/02/22 Python
html+css3实现的登录界面
2020/12/09 HTML / CSS
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
急诊科护士自我鉴定
2013/10/14 职场文书
历史专业毕业生的自我鉴定
2013/11/15 职场文书
园林毕业生自我鉴定范文
2013/12/29 职场文书
客户服务经理岗位职责
2014/01/29 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
对照四风自我剖析材料
2014/10/07 职场文书
群众路线四风自我剖析材料
2014/10/08 职场文书
表扬信格式模板
2015/05/05 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
python ConfigParser库的使用及遇到的坑
2022/02/12 Python