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效率调优经验
Jun 04 Javascript
原生javascript图片自动或手动切换示例附演示源码
Sep 04 Javascript
javascript使用 concat 方法对数组进行合并的方法
Sep 08 Javascript
浅谈js中的引用和复制(传值和传址)
Sep 18 Javascript
详解Angular 4.x 动态创建组件
Apr 25 Javascript
单页面vue引入百度统计的使用方法示例详解
Oct 13 Javascript
在小程序开发中使用npm的方法
Oct 17 Javascript
AngularJs中$cookies简单用法分析
May 30 Javascript
百度小程序之间的页面通信过程详解
Jul 18 Javascript
vue cli3 配置proxy代理无效的解决
Oct 30 Javascript
javascript实现弹出层效果
Dec 10 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
Nov 12 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
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
深入php list()函数的详解
2013/06/05 PHP
php中opendir函数用法实例
2014/11/15 PHP
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
js实现模拟银行卡账号输入显示效果
2015/11/18 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
vue语法之拼接字符串的示例代码
2017/10/25 Javascript
python多线程抓取天涯帖子内容示例
2014/04/03 Python
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
Python读取YAML文件过程详解
2019/12/30 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
百度JavaScript笔试题
2015/01/15 面试题
2014年国庆节活动总结
2014/08/26 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
员工辞职信范文
2015/03/02 职场文书
农村党支部承诺书
2015/04/30 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
2016年寒假家长评语
2015/10/10 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
常用的Python代码调试工具总结
2021/06/23 Python
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL