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验证模型自我实现的具体方法
Jun 21 Javascript
js二维数组排序的简单示例代码
Jan 24 Javascript
Javascript中设置默认参数值示例
Sep 11 Javascript
javascript检测是否联网的实现代码
Sep 28 Javascript
js获取内联样式的方法
Jan 27 Javascript
Bootstrap每天必学之js插件
Nov 30 Javascript
jQuery旋转木马式幻灯片轮播特效
Dec 04 Javascript
seajs中最常用的7个功能、配置示例
Oct 10 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
Dec 10 jQuery
微信小程序生成分享海报方法(附带二维码生成)
Mar 29 Javascript
浅谈ECMAScript 中的Array类型
Jun 10 Javascript
Angular之jwt令牌身份验证的实现
Feb 14 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
删除及到期域名的查看(抢域名必备哦)
2008/05/14 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
php实现水仙花数的4个示例分享
2014/04/08 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
jquery JSON的解析方式
2009/07/25 Javascript
提升PHP安全:8个必须修改的PHP默认配置
2014/11/17 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
使用window.prompt()实现弹出用户输入的对话框
2015/04/13 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
浅谈JavaScript对象与继承
2016/07/10 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
微信分享调用jssdk实例
2017/06/08 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
2019/09/16 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
Python 数据处理库 pandas进阶教程
2018/04/21 Python
全网首秀之Pycharm十大实用技巧(推荐)
2020/04/27 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
大学毕业生的自我鉴定
2013/11/30 职场文书
暑假家长评语大全
2014/04/17 职场文书
房地产端午节活动方案
2014/08/24 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
大学生党员自我评价
2015/03/04 职场文书