excel导入到表格

表格导入与导出,文末带Blob.js和Export2Excel.js

导入按钮

<input type="file" @change="import(this)"accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"/>

导入方法

import(obj) {let _this = this;let inputDOM = this.$refs.inputer;   // 通过DOM取文件数据this.file = event.currentTarget.files[0];var rABS = false; //是否将文件读取为二进制字符串var f = this.file;var reader = new FileReader();FileReader.prototype.readAsBinaryString = function (f) {//rABS是否将文件读取为二进制字符串,wb读取完成的数据var binary = "", rABS = false, pt = this, wb, outdata;var reader = new FileReader();reader.onload = function (e) {var bytes = new Uint8Array(reader.result);var length = bytes.byteLength;for (let 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 数据再处理for (let i = 0, len = outdata.length; i < len; i++) {let obj = {};if (outdata[i].hasOwnProperty('物料分类') || outdata[i].hasOwnProperty('物料名称') || outdata[i].hasOwnProperty('物料编码')) {obj.sort = outdata[i]['物料分类'];obj.name = outdata[i]['物料名称'];obj.code = outdata[i]['物料编码'];obj.specification = outdata[i]['规格'];obj.stock = outdata[i]['库存'];_this.tableData.push(obj);} else {_this.$message.warning("上传文件数据格式不正确");return}}};reader.readAsArrayBuffer(f);};if (rABS) {reader.readAsArrayBuffer(f);} else {reader.readAsBinaryString(f);}},

这里表格的属性与头部一一对应,tabelData是本地表格名称,根据实际情况进行更改

表格数据导出为excel

第一种表格没有分页

导出按钮

<el-button plain icon="el-icon-upload2" @click="exportExcel">导出</el-button>
exportExcel: function () {let _this = this;require.ensure([], () => {const {export_json_to_excel} = require('../../js/vendor/Export2Excel.js');const tHeader = ['姓名', '性别', '年龄', '地址', '爱好', '职位'];const list = _this.tabelData;export_json_to_excel(tHeader, list, '表格名称');})})},

根据自己代码的情况写上Export2Excel.js的绝对路径,表格头部自定义

tHeader 根据实际情况自定义,list是要导出数据的表格名称。

第二种表格有分页,方法一只能导出当前页数据,文中是重新请求接口的方式来导出所有数据

exportExcel: function () {let _this = this;API.materialRecords({page: 1,psize: 99999}).then(result => {require.ensure([], () => {const {export_json_to_excel} = require('../../js/vendor/Export2Excel.js');const tHeader = ['姓名', '性别', '年龄', '地址', '爱好', '职位'];const list = _this.tabelData;export_json_to_excel(tHeader, list, '表格名称');})})},

将psize设置成99999,这里如果数据超过99999条就好出现无法全部导出的问题,如果大家有更好的解决方法欢迎评论

Blob.js

/* eslint-disable */
/* Blob.js* A Blob implementation.* 2014-05-27** By Eli Grey, http://eligrey.com* By Devin Samarin, https://github.com/eboyjr* License: X11/MIT*   See LICENSE.md*//*global self, unescape */
/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,plusplus: true *//*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */(function (view) {"use strict";view.URL = view.URL || view.webkitURL;if (view.Blob && view.URL) {try {new Blob;return;} catch (e) {}}// Internally we use a BlobBuilder implementation to base Blob off of// in order to support older browsers that only have BlobBuildervar BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || (function(view) {varget_class = function(object) {return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];}, FakeBlobBuilder = function BlobBuilder() {this.data = [];}, FakeBlob = function Blob(data, type, encoding) {this.data = data;this.size = data.length;this.type = type;this.encoding = encoding;}, FBB_proto = FakeBlobBuilder.prototype, FB_proto = FakeBlob.prototype, FileReaderSync = view.FileReaderSync, FileException = function(type) {this.code = this[this.name = type];}, file_ex_codes = ("NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR "+ "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR").split(" "), file_ex_code = file_ex_codes.length, real_URL = view.URL || view.webkitURL || view, real_create_object_URL = real_URL.createObjectURL, real_revoke_object_URL = real_URL.revokeObjectURL, URL = real_URL, btoa = view.btoa, atob = view.atob, ArrayBuffer = view.ArrayBuffer, Uint8Array = view.Uint8Array;FakeBlob.fake = FB_proto.fake = true;while (file_ex_code--) {FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;}if (!real_URL.createObjectURL) {URL = view.URL = {};}URL.createObjectURL = function(blob) {vartype = blob.type, data_URI_header;if (type === null) {type = "application/octet-stream";}if (blob instanceof FakeBlob) {data_URI_header = "data:" + type;if (blob.encoding === "base64") {return data_URI_header + ";base64," + blob.data;} else if (blob.encoding === "URI") {return data_URI_header + "," + decodeURIComponent(blob.data);} if (btoa) {return data_URI_header + ";base64," + btoa(blob.data);} else {return data_URI_header + "," + encodeURIComponent(blob.data);}} else if (real_create_object_URL) {return real_create_object_URL.call(real_URL, blob);}};URL.revokeObjectURL = function(object_URL) {if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) {real_revoke_object_URL.call(real_URL, object_URL);}};FBB_proto.append = function(data/*, endings*/) {var bb = this.data;// decode data to a binary stringif (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {varstr = "", buf = new Uint8Array(data), i = 0, buf_len = buf.length;for (; i < buf_len; i++) {str += String.fromCharCode(buf[i]);}bb.push(str);} else if (get_class(data) === "Blob" || get_class(data) === "File") {if (FileReaderSync) {var fr = new FileReaderSync;bb.push(fr.readAsBinaryString(data));} else {// async FileReader won't work as BlobBuilder is syncthrow new FileException("NOT_READABLE_ERR");}} else if (data instanceof FakeBlob) {if (data.encoding === "base64" && atob) {bb.push(atob(data.data));} else if (data.encoding === "URI") {bb.push(decodeURIComponent(data.data));} else if (data.encoding === "raw") {bb.push(data.data);}} else {if (typeof data !== "string") {data += ""; // convert unsupported types to strings}// decode UTF-16 to binary stringbb.push(unescape(encodeURIComponent(data)));}};FBB_proto.getBlob = function(type) {if (!arguments.length) {type = null;}return new FakeBlob(this.data.join(""), type, "raw");};FBB_proto.toString = function() {return "[object BlobBuilder]";};FB_proto.slice = function(start, end, type) {var args = arguments.length;if (args < 3) {type = null;}return new FakeBlob(this.data.slice(start, args > 1 ? end : this.data.length), type, this.encoding);};FB_proto.toString = function() {return "[object Blob]";};FB_proto.close = function() {this.size = this.data.length = 0;};return FakeBlobBuilder;}(view));view.Blob = function Blob(blobParts, options) {var type = options ? (options.type || "") : "";var builder = new BlobBuilder();if (blobParts) {for (var i = 0, len = blobParts.length; i < len; i++) {builder.append(blobParts[i]);}}return builder.getBlob(type);};
}(typeof self !== "undefined" && self || typeof window !== "undefined" && window || this.content || this));

Export2Excel.js

/* eslint-disable */
require('script-loader!file-saver');
// require('script-loader!vendor/Blob');
require('./Blob.js');
require('script-loader!xlsx/dist/xlsx.core.min');
function generateArray(table) {var out = [];var rows = table.querySelectorAll('tr');var ranges = [];for (var R = 0; R < rows.length; ++R) {var outRow = [];var row = rows[R];var columns = row.querySelectorAll('td');for (var C = 0; C < columns.length; ++C) {var cell = columns[C];var colspan = cell.getAttribute('colspan');var rowspan = cell.getAttribute('rowspan');var cellValue = cell.innerText;if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;//Skip rangesranges.forEach(function (range) {if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);}});//Handle Row Spanif (rowspan || colspan) {rowspan = rowspan || 1;colspan = colspan || 1;ranges.push({s: {r: R, c: outRow.length}, e: {r: R + rowspan - 1, c: outRow.length + colspan - 1}});};//Handle ValueoutRow.push(cellValue !== "" ? cellValue : null);//Handle Colspanif (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null);}out.push(outRow);}return [out, ranges];
};function datenum(v, date1904) {if (date1904) v += 1462;var epoch = Date.parse(v);return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
}function sheet_from_array_of_arrays(data, opts) {var ws = {};var range = {s: {c: 10000000, r: 10000000}, e: {c: 0, r: 0}};for (var R = 0; R != data.length; ++R) {for (var C = 0; C != data[R].length; ++C) {if (range.s.r > R) range.s.r = R;if (range.s.c > C) range.s.c = C;if (range.e.r < R) range.e.r = R;if (range.e.c < C) range.e.c = C;var cell = {v: data[R][C]};if (cell.v == null) continue;var cell_ref = XLSX.utils.encode_cell({c: C, r: R});if (typeof cell.v === 'number') cell.t = 'n';else if (typeof cell.v === 'boolean') cell.t = 'b';else if (cell.v instanceof Date) {cell.t = 'n';cell.z = XLSX.SSF._table[14];cell.v = datenum(cell.v);}else cell.t = 's';ws[cell_ref] = cell;}}if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);return ws;
}function Workbook() {if (!(this instanceof Workbook)) return new Workbook();this.SheetNames = [];this.Sheets = {};
}function s2ab(s) {var buf = new ArrayBuffer(s.length);var view = new Uint8Array(buf);for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;return buf;
}export function export_table_to_excel(id) {var theTable = document.getElementById(id);console.log('a')var oo = generateArray(theTable);var ranges = oo[1];/* original data */var data = oo[0];var ws_name = "SheetJS";console.log(data);var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);/* add ranges to worksheet */// ws['!cols'] = ['apple', 'banan'];ws['!merges'] = ranges;/* add worksheet to workbook */wb.SheetNames.push(ws_name);wb.Sheets[ws_name] = ws;var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), "test.xlsx")
}function formatJson(jsonData) {console.log(jsonData)
}
export function export_json_to_excel(th, jsonData, defaultTitle) {/* original data */var data = jsonData;data.unshift(th);var ws_name = "SheetJS";var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);/* add worksheet to workbook */wb.SheetNames.push(ws_name);wb.Sheets[ws_name] = ws;var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'});var title = defaultTitle || '列表'saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), title + ".xlsx")
}

vue 前端表格导入与导出相关推荐

  1. 【vue + Excel表格导入与导出】导入Excel并展示在el-table表格中,表格导出为Excel文件

    注:末尾有完整代码 效果图 Excel 1.下载依赖 xlsx是导入所需依赖 file-saver是导出所需依赖 npm install xlsx --save npm install file-sa ...

  2. vue、微信小程序上传文件(base64格式、一般格式)及vue的表格导入和导出

    一.上传文件 1.vue项目 base64格式 onInputChange(el) {var self = this;let file=el.file;let type=file.type.split ...

  3. vue+iView实现导入与导出excel功能

    vue+iView实现导入与导出excel功能 一,需求: 1,导入导出的必要性 导入与导出在日常项目开发中经常用到, 批量导入功能可以快速插入添加数据. 导出功能则可方便直观明了拿到所需展示的重要数 ...

  4. Vue前端表格导出Excel文件

    前言 分享一个Vue前端导出Excel文件的方法.记录学习! 功能需求:将表格的全部数据导出Excel格式的文件 前端:Vue3+Element-Plus 这个导出方法全部为前端操作,后端只需要传入表 ...

  5. vue前端表格插件_Grid.js - 跨框架的前端表格插件

    只想简简单单画个表格,但 React,Vue,Angular,-,这么多前端框架,各自都有不同的表格渲染库.就没有表格库能"一次画表,到处运行"吗?来看看 Grid.js 这个跨框 ...

  6. Bootstrap:EXCEL表格导入、导出数据库

    后台代码如下: #region 将EXCEL表格导入数据库public void ImportFirstinspection(){try{Context context = new Context() ...

  7. 清华大学赵志磊--基于thinkPHP6框架的Excel表格导入和导出

    1.Excel表格导出 先上大图:(可放大查看,当作壁纸再好不过,超高清壁纸) 正题: 首先.thinkPHP6框架内在admin应用下,自定义文件夹,存放公共类,里面封装公共方法. 命名空间写好,记 ...

  8. tp5导入csv数据到mysql_tp5 Excel表格导入_tp5导出Excel

    #### thinkphp5使用PHPExcel导入Excel.csv表格,thinkphp5表格导入导出 ##### tp5使用PHPExcel导入Excel表格文件: ```php PS:将PHP ...

  9. 前端vue Excel表格导入导出功能(纯前端)

    目录 第一步.安装插件 第二步.导入Blob.js和Export2Excel.js,在/src/assets下新建文件 第三步.导入文件 第四步.导出文件 第一步.安装插件 yarn add file ...

最新文章

  1. Cell二连发 | 广东CDC/耶鲁大学利用纳米孔测序揭示中/美新冠病毒基因组流行病学传播规律...
  2. 关于ubuntu的root密码问题
  3. zcmu2117(普通母函数)
  4. flink搭建集群(一主三从)
  5. autosys虚拟机定义
  6. mysql中SQL查询优化方法总结
  7. H264学习方法历程资料
  8. php编程输出心形图案_如何用C语言先输出一段文字如何再输出心形图案?
  9. 管理感悟:鼓励正确的山头主义
  10. windows对计算机硬件有要求吗,win10对硬件有什么要求_win10硬件配置有哪些要求
  11. 《 阿房宫赋》古文鉴赏
  12. 文件上传漏洞(客户端绕过,MIMEtipe绕过,getimagesize绕过)
  13. 面试必问题:缓存击穿、缓存穿透、缓存雪崩,你还傻傻分不清
  14. TDM和STDM复用
  15. 利用Go制作微信机器人(一)发送消息
  16. Android画不规则形状
  17. apache 配置http跳转https
  18. 宜信漏洞管理平台--洞察搭建
  19. 半年卖出4.6亿只粽子,老字号的“想象空间”有多大?
  20. 立体图像和平面图像质量评价常用数据库

热门文章

  1. 简单的登陆注册的实现+验证码和表单验证
  2. 【Java版oj】day33剪花布条、客似云来
  3. 玩吃鸡台式计算机配置,如何判断win7系统电脑能否玩吃鸡游戏
  4. 异步升压 内置mos升压芯片FP6298
  5. 3D建模制作的6个阶段,是什么赋予了3D角色模型的生命力
  6. UnityShader-BilateralFilter(双边滤波,磨皮滤镜)
  7. 区块链+金融崛起 京东金融研究院发布区块链金融应用白皮书
  8. 拍照图片上传竖立问题解决~
  9. 数字怎么横 竖排_怎样在WORD文字竖排时让数字也竖立?
  10. QGIS入门实验十四 半透明立体影像图