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 相关文章推荐
jquery简单实现鼠标经过导航条改变背景图
Dec 17 Javascript
禁止IE用右键的JS代码
Dec 30 Javascript
JavaScript程序员应该知道的45个实用技巧
Mar 04 Javascript
引用其它js时如何同时处理多个window.onload事件
Sep 02 Javascript
javascript实现移动端上的触屏拖拽功能
Mar 04 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
Sep 18 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
Sep 29 Javascript
使用JS正则表达式 替换括号,尖括号等
Nov 29 Javascript
node.js基于mongodb的搜索分页示例
Jan 22 Javascript
jquery.validate.js 多个相同name的处理方式
Jul 10 jQuery
JavaScript实现无刷新上传预览图片功能
Aug 02 Javascript
vue3.0实现点击切换验证码(组件)及校验
Nov 18 Vue.js
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
substr()函数中文版
2006/10/09 PHP
phpMyAdmin 安装及问题总结
2009/05/28 PHP
php 读取文件乱码问题
2010/02/20 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
2014/07/29 PHP
thinkphp实现发送邮件密码找回功能实例
2014/12/01 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
Yii2实现自定义独立验证器的方法
2017/05/05 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
提高网站信任度的技巧
2008/10/17 Javascript
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
2011/03/25 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
2014/10/17 Javascript
详解JavaScript函数
2015/12/01 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
jQuery实现的表格展开伸缩效果实例
2016/09/07 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
Nodejs使用Mongodb存储与提供后端CRD服务详解
2018/09/04 NodeJs
vue+iview实现分页及查询功能
2020/11/17 Vue.js
js闭包的9个使用场景
2020/12/29 Javascript
VSCode下好用的Python插件及配置
2018/04/06 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
python交互界面的退出方法
2019/02/16 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
金融专业个人的自我评价
2013/10/18 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
公司酒会主持词
2015/07/02 职场文书