支持导入 xlsx

This commit is contained in:
xuliangzhan
2019-11-07 17:01:36 +08:00
parent 1313b3f857
commit 71bc315e85
5 changed files with 46 additions and 31 deletions

25
dist/index.common.js vendored

File diff suppressed because one or more lines are too long

23
dist/index.js vendored
View File

@@ -148,11 +148,12 @@
});
}
function importXLSX(params, evnt) {
function importXLSX(params) {
var $table = params.$table,
columns = params.columns;
var importCallback = $table.importCallback;
var file = evnt.target.files[0];
columns = params.columns,
options = params.options,
file = params.file;
var _importCallback = $table._importCallback;
var fileReader = new FileReader();
fileReader.onload = function (e) {
@@ -167,22 +168,26 @@
if (status) {
$table.createData(rows).then(function (data) {
return $table.reloadData(data);
if (options.mode === 'append') {
$table.insertAt(data, -1);
} else {
$table.reloadData(data);
}
});
}
if (importCallback) {
importCallback(status);
if (_importCallback) {
_importCallback(status);
}
};
fileReader.readAsBinaryString(file);
}
function handleImportEvent(params, evnt) {
function handleImportEvent(params) {
switch (params.options.type) {
case 'xlsx':
importXLSX(params, evnt);
importXLSX(params);
return false;
}
}

2
dist/index.min.js vendored
View File

@@ -1 +1 @@
!function(e,t){if("function"==typeof define&&define.amd)define("vxe-table-plugin-export",["exports","xe-utils","xlsx"],t);else if("undefined"!=typeof exports)t(exports,require("xe-utils"),require("xlsx"));else{var r={exports:{}};t(r.exports,e.XEUtils,e.XLSX),e.VXETablePluginExport=r.exports.default}}(this,function(e,d,v){"use strict";var t;function a(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return a=function(){return e},e}function r(e){var t=e.options,n=e.columns,r=e.datas,o=t.sheetName,i=t.type,a=t.isHeader,l=t.original,u={};a&&n.forEach(function(e){u[e.id]=l?e.property:e.getTitle()});var s=r.map(function(t){var r={};return n.forEach(function(e){r[e.id]=l?d.default.get(t,e.property):t[e.id]}),r}),c=v.utils.book_new(),f=v.utils.json_to_sheet((a?[u]:[]).concat(s),{skipHeader:!0});v.utils.book_append_sheet(c,f,o);var p=v.write(c,{bookType:i,bookSST:!1,type:"binary"});!function(e,t){if(window.Blob){var r=t.filename,n=t.type;if(navigator.msSaveBlob)navigator.msSaveBlob(e,r);else{var o=document.createElement("a");o.target="_blank",o.download="".concat(r,".").concat(n),o.href=URL.createObjectURL(e),document.body.appendChild(o),o.click(),document.body.removeChild(o)}}else console.error("[vxe-table-plugin-export] The current environment does not support exports.")}(new Blob([function(e){for(var t=new ArrayBuffer(e.length),r=new Uint8Array(t),n=0;n!==e.length;++n)r[n]=255&e.charCodeAt(n);return t}(p)],{type:"application/octet-stream"}),t)}function s(e){return e.replace(/^"/,"").replace(/"$/,"")}function n(e,t){var a=e.$table,l=e.columns,u=a.importCallback,r=t.target.files[0],n=new FileReader;n.onload=function(e){var t=v.read(e.target.result,{type:"binary"}),r=function(e,t){var r=t.split("\n"),n=[],o=[];if(r.length){var i=r.slice(1);r[0].split(",").forEach(function(e){var t=s(e);t&&n.push(t)}),i.forEach(function(e){if(e){var r={};e.split(",").forEach(function(e,t){r[n[t]]=s(e)}),o.push(r)}})}return{fields:n,rows:o}}(0,v.utils.sheet_to_csv(t.Sheets.Sheet1)),n=r.fields,o=r.rows,i=function(e,t){var r=[];return e.forEach(function(e){var t=e.property;t&&r.push(t)}),r.every(function(e){return t.includes(e)})}(l,n);i&&a.createData(o).then(function(e){return a.reloadData(e)}),u&&u(i)},n.readAsBinaryString(r)}function o(e,t){switch(e.options.type){case"xlsx":return n(e,t),!1}}function i(e){switch(e.options.type){case"xlsx":return r(e),!1}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.VXETablePluginExport=void 0,d=(t=d)&&t.__esModule?t:{default:t},v=function(e){if(e&&e.__esModule)return e;var t=a();if(t&&t.has(e))return t.get(e);var r={};if(null!=e){var n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=n?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=e[o]}}r.default=e,t&&t.set(e,r);return r}(v);var l={install:function(e){Object.assign(e.types,{xlsx:1}),e.interceptor.mixin({"event.import":o,"event.export":i})}};e.VXETablePluginExport=l,"undefined"!=typeof window&&window.VXETable&&window.VXETable.use(l);var u=l;e.default=u});
!function(e,t){if("function"==typeof define&&define.amd)define("vxe-table-plugin-export",["exports","xe-utils","xlsx"],t);else if("undefined"!=typeof exports)t(exports,require("xe-utils"),require("xlsx"));else{var n={exports:{}};t(n.exports,e.XEUtils,e.XLSX),e.VXETablePluginExport=n.exports.default}}(this,function(e,d,v){"use strict";var t;function a(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return a=function(){return e},e}function n(e){var t=e.options,r=e.columns,n=e.datas,o=t.sheetName,i=t.type,a=t.isHeader,l=t.original,u={};a&&r.forEach(function(e){u[e.id]=l?e.property:e.getTitle()});var s=n.map(function(t){var n={};return r.forEach(function(e){n[e.id]=l?d.default.get(t,e.property):t[e.id]}),n}),c=v.utils.book_new(),p=v.utils.json_to_sheet((a?[u]:[]).concat(s),{skipHeader:!0});v.utils.book_append_sheet(c,p,o);var f=v.write(c,{bookType:i,bookSST:!1,type:"binary"});!function(e,t){if(window.Blob){var n=t.filename,r=t.type;if(navigator.msSaveBlob)navigator.msSaveBlob(e,n);else{var o=document.createElement("a");o.target="_blank",o.download="".concat(n,".").concat(r),o.href=URL.createObjectURL(e),document.body.appendChild(o),o.click(),document.body.removeChild(o)}}else console.error("[vxe-table-plugin-export] The current environment does not support exports.")}(new Blob([function(e){for(var t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0;r!==e.length;++r)n[r]=255&e.charCodeAt(r);return t}(f)],{type:"application/octet-stream"}),t)}function c(e){return e.replace(/^"/,"").replace(/"$/,"")}function r(e){var a=e.$table,l=e.columns,u=e.options,t=e.file,s=a._importCallback,n=new FileReader;n.onload=function(e){var t=v.read(e.target.result,{type:"binary"}),n=function(e,t){var n=t.split("\n"),r=[],o=[];if(n.length){var i=n.slice(1);n[0].split(",").forEach(function(e){var t=c(e);t&&r.push(t)}),i.forEach(function(e){if(e){var n={};e.split(",").forEach(function(e,t){n[r[t]]=c(e)}),o.push(n)}})}return{fields:r,rows:o}}(0,v.utils.sheet_to_csv(t.Sheets.Sheet1)),r=n.fields,o=n.rows,i=function(e,t){var n=[];return e.forEach(function(e){var t=e.property;t&&n.push(t)}),n.every(function(e){return t.includes(e)})}(l,r);i&&a.createData(o).then(function(e){"append"===u.mode?a.insertAt(e,-1):a.reloadData(e)}),s&&s(i)},n.readAsBinaryString(t)}function o(e){switch(e.options.type){case"xlsx":return r(e),!1}}function i(e){switch(e.options.type){case"xlsx":return n(e),!1}}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.VXETablePluginExport=void 0,d=(t=d)&&t.__esModule?t:{default:t},v=function(e){if(e&&e.__esModule)return e;var t=a();if(t&&t.has(e))return t.get(e);var n={};if(null!=e){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}}n.default=e,t&&t.set(e,n);return n}(v);var l={install:function(e){Object.assign(e.types,{xlsx:1}),e.interceptor.mixin({"event.import":o,"event.export":i})}};e.VXETablePluginExport=l,"undefined"!=typeof window&&window.VXETable&&window.VXETable.use(l);var u=l;e.default=u});

View File

@@ -94,10 +94,9 @@ function checkImportData(columns: any[], fields: string[], rows: any[]) {
return tableFields.every((field: string) => fields.includes(field))
}
function importXLSX(params: any, evnt: any) {
const { $table, columns } = params
const { importCallback } = $table
const file = evnt.target.files[0]
function importXLSX(params: any) {
const { $table, columns, options, file } = params
const { _importCallback } = $table
const fileReader = new FileReader()
fileReader.onload = (e: any) => {
const workbook = XLSX.read(e.target.result, { type: 'binary' })
@@ -107,19 +106,25 @@ function importXLSX(params: any, evnt: any) {
const status = checkImportData(columns, fields, rows)
if (status) {
$table.createData(rows)
.then((data: any[]) => $table.reloadData(data))
.then((data: any[]) => {
if (options.mode === 'append') {
$table.insertAt(data, -1)
} else {
$table.reloadData(data)
}
})
}
if (importCallback) {
importCallback(status)
if (_importCallback) {
_importCallback(status)
}
}
fileReader.readAsBinaryString(file)
}
function handleImportEvent(params: any, evnt: any) {
function handleImportEvent(params: any) {
switch (params.options.type) {
case 'xlsx':
importXLSX(params, evnt)
importXLSX(params)
return false
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "vxe-table-plugin-export",
"version": "1.0.5",
"version": "1.0.6",
"description": "基于 vxe-table 表格的增强插件,支持导出 xlsx 等格式",
"scripts": {
"lib": "gulp build"
@@ -54,7 +54,7 @@
"xlsx": "^0.15.1"
},
"peerDependencies": {
"vxe-table": ">=2.6.12",
"vxe-table": ">=2.6.14",
"xe-utils": ">=2.2.0"
},
"repository": {