vxe-table-plugin-export-xlsx-xhx 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +75 -0
- package/depend.ts +4 -0
- package/dist/index.common.js +259 -0
- package/dist/index.js +270 -0
- package/dist/index.min.js +1 -0
- package/dist/index.umd.js +546 -0
- package/dist/index.umd.min.js +1 -0
- package/index.d.ts +16 -0
- package/index.ts +219 -0
- package/package.json +76 -0
package/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2019 Xu Liangzhan
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
# vxe-table-plugin-export-xlsx
|
2
|
+
|
3
|
+
[](https://gitee.com/xuliangzhan_admin/vxe-table-plugin-export-xlsx/stargazers)
|
4
|
+
[](https://www.npmjs.org/package/vxe-table-plugin-export-xlsx)
|
5
|
+
[](http://npm-stat.com/charts.html?package=vxe-table-plugin-export-xlsx)
|
6
|
+
[](https://unpkg.com/vxe-table-plugin-export-xlsx/dist/index.min.js)
|
7
|
+
[](https://github.com/xuliangzhan/vxe-table-plugin-export-xlsx/blob/master/LICENSE)
|
8
|
+
|
9
|
+
基于 [vxe-table](https://github.com/xuliangzhan/vxe-table) 表格的增强插件,支持导出 xlsx 格式
|
10
|
+
|
11
|
+
## Installing
|
12
|
+
|
13
|
+
```shell
|
14
|
+
npm install xe-utils vxe-table vxe-table-plugin-export-xlsx xlsx
|
15
|
+
```
|
16
|
+
|
17
|
+
```javascript
|
18
|
+
import Vue from 'vue'
|
19
|
+
import VXETable from 'vxe-table'
|
20
|
+
import VXETablePluginExportXLSX from 'vxe-table-plugin-export-xlsx'
|
21
|
+
|
22
|
+
Vue.use(VXETable)
|
23
|
+
VXETable.use(VXETablePluginExportXLSX)
|
24
|
+
```
|
25
|
+
|
26
|
+
## Demo
|
27
|
+
|
28
|
+
```html
|
29
|
+
<vxe-toolbar>
|
30
|
+
<template v-slot:buttons>
|
31
|
+
<vxe-button @click="exportEvent">导出.xlsx</vxe-button>
|
32
|
+
</template>
|
33
|
+
</vxe-toolbar>
|
34
|
+
|
35
|
+
<vxe-table
|
36
|
+
border
|
37
|
+
ref="xTable"
|
38
|
+
height="600"
|
39
|
+
:data="tableData">
|
40
|
+
<vxe-table-column type="index" width="60"></vxe-table-column>
|
41
|
+
<vxe-table-column field="name" title="Name"></vxe-table-column>
|
42
|
+
<vxe-table-column field="age" title="Age"></vxe-table-column>
|
43
|
+
<vxe-table-column field="date" title="Date"></vxe-table-column>
|
44
|
+
</vxe-table>
|
45
|
+
```
|
46
|
+
|
47
|
+
```javascript
|
48
|
+
export default {
|
49
|
+
data () {
|
50
|
+
return {
|
51
|
+
tableData: [
|
52
|
+
{
|
53
|
+
id: 100,
|
54
|
+
name: 'test',
|
55
|
+
age: 26,
|
56
|
+
date: null
|
57
|
+
}
|
58
|
+
]
|
59
|
+
}
|
60
|
+
},
|
61
|
+
methods: {
|
62
|
+
exportEvent() {
|
63
|
+
this.$refs.xTable.exportData({
|
64
|
+
filename: 'export',
|
65
|
+
sheetName: 'Sheet1',
|
66
|
+
type: 'xlsx'
|
67
|
+
})
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
```
|
72
|
+
|
73
|
+
## License
|
74
|
+
|
75
|
+
MIT License, 2019-present, Xu Liangzhan
|
package/depend.ts
ADDED
@@ -0,0 +1,259 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports["default"] = exports.VXETablePluginExportXLSX = void 0;
|
7
|
+
|
8
|
+
var _xeUtils = _interopRequireDefault(require("xe-utils/methods/xe-utils"));
|
9
|
+
|
10
|
+
var _xlsx = _interopRequireDefault(require("xlsx"));
|
11
|
+
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
13
|
+
|
14
|
+
/* eslint-disable no-unused-vars */
|
15
|
+
|
16
|
+
/* eslint-enable no-unused-vars */
|
17
|
+
var _vxetable;
|
18
|
+
|
19
|
+
function getFooterCellValue($table, opts, rows, column) {
|
20
|
+
var cellValue = _xeUtils["default"].toString(rows[$table.$getColumnIndex(column)]);
|
21
|
+
|
22
|
+
return cellValue;
|
23
|
+
}
|
24
|
+
|
25
|
+
function toBuffer(wbout) {
|
26
|
+
var buf = new ArrayBuffer(wbout.length);
|
27
|
+
var view = new Uint8Array(buf);
|
28
|
+
|
29
|
+
for (var index = 0; index !== wbout.length; ++index) {
|
30
|
+
view[index] = wbout.charCodeAt(index) & 0xFF;
|
31
|
+
}
|
32
|
+
|
33
|
+
return buf;
|
34
|
+
}
|
35
|
+
|
36
|
+
function exportXLSX(params) {
|
37
|
+
var $table = params.$table,
|
38
|
+
options = params.options,
|
39
|
+
columns = params.columns,
|
40
|
+
datas = params.datas;
|
41
|
+
var sheetName = options.sheetName,
|
42
|
+
type = options.type,
|
43
|
+
isHeader = options.isHeader,
|
44
|
+
isFooter = options.isFooter,
|
45
|
+
original = options.original,
|
46
|
+
message = options.message,
|
47
|
+
footerFilterMethod = options.footerFilterMethod;
|
48
|
+
var colHead = {};
|
49
|
+
var footList = [];
|
50
|
+
var rowList = datas;
|
51
|
+
|
52
|
+
if (isHeader) {
|
53
|
+
columns.forEach(function (column) {
|
54
|
+
colHead[column.id] = _xeUtils["default"].toString(original ? column.property : column.getTitle());
|
55
|
+
});
|
56
|
+
}
|
57
|
+
|
58
|
+
if (isFooter) {
|
59
|
+
var _$table$getTableData = $table.getTableData(),
|
60
|
+
footerData = _$table$getTableData.footerData;
|
61
|
+
|
62
|
+
var footers = footerFilterMethod ? footerData.filter(footerFilterMethod) : footerData;
|
63
|
+
footers.forEach(function (rows) {
|
64
|
+
var item = {};
|
65
|
+
columns.forEach(function (column) {
|
66
|
+
item[column.id] = getFooterCellValue($table, options, rows, column);
|
67
|
+
});
|
68
|
+
footList.push(item);
|
69
|
+
});
|
70
|
+
}
|
71
|
+
|
72
|
+
var book = _xlsx["default"].utils.book_new();
|
73
|
+
|
74
|
+
var sheet = _xlsx["default"].utils.json_to_sheet((isHeader ? [colHead] : []).concat(rowList).concat(footList), {
|
75
|
+
skipHeader: true
|
76
|
+
}); // 转换数据
|
77
|
+
|
78
|
+
|
79
|
+
_xlsx["default"].utils.book_append_sheet(book, sheet, sheetName);
|
80
|
+
|
81
|
+
var wbout = _xlsx["default"].write(book, {
|
82
|
+
bookType: type,
|
83
|
+
bookSST: false,
|
84
|
+
type: 'binary'
|
85
|
+
});
|
86
|
+
|
87
|
+
var blob = new Blob([toBuffer(wbout)], {
|
88
|
+
type: 'application/octet-stream'
|
89
|
+
}); // 保存导出
|
90
|
+
|
91
|
+
downloadFile(blob, options);
|
92
|
+
|
93
|
+
if (message !== false) {
|
94
|
+
_vxetable.modal.message({
|
95
|
+
message: _vxetable.t('vxe.table.expSuccess'),
|
96
|
+
status: 'success'
|
97
|
+
});
|
98
|
+
}
|
99
|
+
}
|
100
|
+
|
101
|
+
function downloadFile(blob, options) {
|
102
|
+
if (window.Blob) {
|
103
|
+
var filename = options.filename,
|
104
|
+
type = options.type;
|
105
|
+
|
106
|
+
if (navigator.msSaveBlob) {
|
107
|
+
navigator.msSaveBlob(blob, "".concat(filename, ".").concat(type));
|
108
|
+
} else {
|
109
|
+
var linkElem = document.createElement('a');
|
110
|
+
linkElem.target = '_blank';
|
111
|
+
linkElem.download = "".concat(filename, ".").concat(type);
|
112
|
+
linkElem.href = URL.createObjectURL(blob);
|
113
|
+
document.body.appendChild(linkElem);
|
114
|
+
linkElem.click();
|
115
|
+
document.body.removeChild(linkElem);
|
116
|
+
}
|
117
|
+
} else {
|
118
|
+
console.error(_vxetable.t('vxe.error.notExp'));
|
119
|
+
}
|
120
|
+
}
|
121
|
+
|
122
|
+
function replaceDoubleQuotation(val) {
|
123
|
+
return val.replace(/^"/, '').replace(/"$/, '');
|
124
|
+
}
|
125
|
+
|
126
|
+
function parseCsv(columns, content) {
|
127
|
+
var list = content.split('\n');
|
128
|
+
var fields = [];
|
129
|
+
var rows = [];
|
130
|
+
|
131
|
+
if (list.length) {
|
132
|
+
var rList = list.slice(1);
|
133
|
+
list[0].split(',').map(replaceDoubleQuotation);
|
134
|
+
rList.forEach(function (r) {
|
135
|
+
if (r) {
|
136
|
+
var item = {};
|
137
|
+
r.split(',').forEach(function (val, colIndex) {
|
138
|
+
if (fields[colIndex]) {
|
139
|
+
item[fields[colIndex]] = replaceDoubleQuotation(val);
|
140
|
+
}
|
141
|
+
});
|
142
|
+
rows.push(item);
|
143
|
+
}
|
144
|
+
});
|
145
|
+
}
|
146
|
+
|
147
|
+
return {
|
148
|
+
fields: fields,
|
149
|
+
rows: rows
|
150
|
+
};
|
151
|
+
}
|
152
|
+
|
153
|
+
function checkImportData(columns, fields, rows) {
|
154
|
+
var tableFields = [];
|
155
|
+
columns.forEach(function (column) {
|
156
|
+
var field = column.property;
|
157
|
+
|
158
|
+
if (field) {
|
159
|
+
tableFields.push(field);
|
160
|
+
}
|
161
|
+
});
|
162
|
+
return tableFields.every(function (field) {
|
163
|
+
return fields.includes(field);
|
164
|
+
});
|
165
|
+
}
|
166
|
+
|
167
|
+
function importXLSX(params) {
|
168
|
+
var columns = params.columns,
|
169
|
+
options = params.options,
|
170
|
+
file = params.file;
|
171
|
+
var $table = params.$table;
|
172
|
+
var _importResolve = $table._importResolve;
|
173
|
+
var fileReader = new FileReader();
|
174
|
+
|
175
|
+
fileReader.onload = function (e) {
|
176
|
+
var workbook = _xlsx["default"].read(e.target.result, {
|
177
|
+
type: 'binary'
|
178
|
+
});
|
179
|
+
|
180
|
+
var csvData = _xlsx["default"].utils.sheet_to_csv(workbook.Sheets.Sheet1);
|
181
|
+
|
182
|
+
var _parseCsv = parseCsv(columns, csvData),
|
183
|
+
fields = _parseCsv.fields,
|
184
|
+
rows = _parseCsv.rows;
|
185
|
+
|
186
|
+
var status = checkImportData(columns, fields, rows);
|
187
|
+
|
188
|
+
if (status) {
|
189
|
+
$table.createData(rows).then(function (data) {
|
190
|
+
if (options.mode === 'append') {
|
191
|
+
$table.insertAt(data, -1);
|
192
|
+
} else {
|
193
|
+
$table.reloadData(data);
|
194
|
+
}
|
195
|
+
});
|
196
|
+
|
197
|
+
if (options.message !== false) {
|
198
|
+
_vxetable.modal.message({
|
199
|
+
message: _xeUtils["default"].template(_vxetable.t('vxe.table.impSuccess'), [rows.length]),
|
200
|
+
status: 'success'
|
201
|
+
});
|
202
|
+
}
|
203
|
+
} else if (options.message !== false) {
|
204
|
+
_vxetable.modal.message({
|
205
|
+
message: _vxetable.t('vxe.error.impFields'),
|
206
|
+
status: 'error'
|
207
|
+
});
|
208
|
+
}
|
209
|
+
|
210
|
+
if (_importResolve) {
|
211
|
+
_importResolve(status);
|
212
|
+
|
213
|
+
$table._importResolve = null;
|
214
|
+
}
|
215
|
+
};
|
216
|
+
|
217
|
+
fileReader.readAsBinaryString(file);
|
218
|
+
}
|
219
|
+
|
220
|
+
function handleImportEvent(params) {
|
221
|
+
if (params.options.type === 'xlsx') {
|
222
|
+
importXLSX(params);
|
223
|
+
return false;
|
224
|
+
}
|
225
|
+
}
|
226
|
+
|
227
|
+
function handleExportEvent(params) {
|
228
|
+
if (params.options.type === 'xlsx') {
|
229
|
+
exportXLSX(params);
|
230
|
+
return false;
|
231
|
+
}
|
232
|
+
}
|
233
|
+
/**
|
234
|
+
* 基于 vxe-table 表格的增强插件,支持导出 xlsx 格式
|
235
|
+
*/
|
236
|
+
|
237
|
+
|
238
|
+
var VXETablePluginExportXLSX = {
|
239
|
+
install: function install(xtable) {
|
240
|
+
var interceptor = xtable.interceptor;
|
241
|
+
_vxetable = xtable;
|
242
|
+
Object.assign(xtable.types, {
|
243
|
+
xlsx: 1
|
244
|
+
});
|
245
|
+
interceptor.mixin({
|
246
|
+
'event.import': handleImportEvent,
|
247
|
+
'event.export': handleExportEvent
|
248
|
+
});
|
249
|
+
}
|
250
|
+
};
|
251
|
+
exports.VXETablePluginExportXLSX = VXETablePluginExportXLSX;
|
252
|
+
|
253
|
+
if (typeof window !== 'undefined' && window.VXETable) {
|
254
|
+
window.VXETable.use(VXETablePluginExportXLSX);
|
255
|
+
}
|
256
|
+
|
257
|
+
var _default = VXETablePluginExportXLSX;
|
258
|
+
exports["default"] = _default;
|
259
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbIl92eGV0YWJsZSIsImdldEZvb3RlckNlbGxWYWx1ZSIsIiR0YWJsZSIsIm9wdHMiLCJyb3dzIiwiY29sdW1uIiwiY2VsbFZhbHVlIiwiWEVVdGlscyIsInRvU3RyaW5nIiwiJGdldENvbHVtbkluZGV4IiwidG9CdWZmZXIiLCJ3Ym91dCIsImJ1ZiIsIkFycmF5QnVmZmVyIiwibGVuZ3RoIiwidmlldyIsIlVpbnQ4QXJyYXkiLCJpbmRleCIsImNoYXJDb2RlQXQiLCJleHBvcnRYTFNYIiwicGFyYW1zIiwib3B0aW9ucyIsImNvbHVtbnMiLCJkYXRhcyIsInNoZWV0TmFtZSIsInR5cGUiLCJpc0hlYWRlciIsImlzRm9vdGVyIiwib3JpZ2luYWwiLCJtZXNzYWdlIiwiZm9vdGVyRmlsdGVyTWV0aG9kIiwiY29sSGVhZCIsImZvb3RMaXN0Iiwicm93TGlzdCIsImZvckVhY2giLCJpZCIsInByb3BlcnR5IiwiZ2V0VGl0bGUiLCJnZXRUYWJsZURhdGEiLCJmb290ZXJEYXRhIiwiZm9vdGVycyIsImZpbHRlciIsIml0ZW0iLCJwdXNoIiwiYm9vayIsIlhMU1giLCJ1dGlscyIsImJvb2tfbmV3Iiwic2hlZXQiLCJqc29uX3RvX3NoZWV0IiwiY29uY2F0Iiwic2tpcEhlYWRlciIsImJvb2tfYXBwZW5kX3NoZWV0Iiwid3JpdGUiLCJib29rVHlwZSIsImJvb2tTU1QiLCJibG9iIiwiQmxvYiIsImRvd25sb2FkRmlsZSIsIm1vZGFsIiwidCIsInN0YXR1cyIsIndpbmRvdyIsImZpbGVuYW1lIiwibmF2aWdhdG9yIiwibXNTYXZlQmxvYiIsImxpbmtFbGVtIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidGFyZ2V0IiwiZG93bmxvYWQiLCJocmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYm9keSIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJyZW1vdmVDaGlsZCIsImNvbnNvbGUiLCJlcnJvciIsInJlcGxhY2VEb3VibGVRdW90YXRpb24iLCJ2YWwiLCJyZXBsYWNlIiwicGFyc2VDc3YiLCJjb250ZW50IiwibGlzdCIsInNwbGl0IiwiZmllbGRzIiwickxpc3QiLCJzbGljZSIsIm1hcCIsInIiLCJjb2xJbmRleCIsImNoZWNrSW1wb3J0RGF0YSIsInRhYmxlRmllbGRzIiwiZmllbGQiLCJldmVyeSIsImluY2x1ZGVzIiwiaW1wb3J0WExTWCIsImZpbGUiLCJfaW1wb3J0UmVzb2x2ZSIsImZpbGVSZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwiZSIsIndvcmtib29rIiwicmVhZCIsInJlc3VsdCIsImNzdkRhdGEiLCJzaGVldF90b19jc3YiLCJTaGVldHMiLCJTaGVldDEiLCJjcmVhdGVEYXRhIiwidGhlbiIsImRhdGEiLCJtb2RlIiwiaW5zZXJ0QXQiLCJyZWxvYWREYXRhIiwidGVtcGxhdGUiLCJyZWFkQXNCaW5hcnlTdHJpbmciLCJoYW5kbGVJbXBvcnRFdmVudCIsImhhbmRsZUV4cG9ydEV2ZW50IiwiVlhFVGFibGVQbHVnaW5FeHBvcnRYTFNYIiwiaW5zdGFsbCIsInh0YWJsZSIsImludGVyY2VwdG9yIiwiT2JqZWN0IiwiYXNzaWduIiwidHlwZXMiLCJ4bHN4IiwibWl4aW4iLCJWWEVUYWJsZSIsInVzZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQVNBOzs7O0FBVkE7O0FBV0E7QUFFQSxJQUFJQSxTQUFKOztBQUVBLFNBQVNDLGtCQUFULENBQTZCQyxNQUE3QixFQUE0Q0MsSUFBNUMsRUFBZ0VDLElBQWhFLEVBQTZFQyxNQUE3RSxFQUFpRztBQUMvRixNQUFJQyxTQUFTLEdBQUdDLG9CQUFRQyxRQUFSLENBQWlCSixJQUFJLENBQUNGLE1BQU0sQ0FBQ08sZUFBUCxDQUF1QkosTUFBdkIsQ0FBRCxDQUFyQixDQUFoQjs7QUFDQSxTQUFPQyxTQUFQO0FBQ0Q7O0FBRUQsU0FBU0ksUUFBVCxDQUFtQkMsS0FBbkIsRUFBNkI7QUFDM0IsTUFBSUMsR0FBRyxHQUFHLElBQUlDLFdBQUosQ0FBZ0JGLEtBQUss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QTRCckcsTUFBNUIsRUFBMkQ7QUFDekQsTUFBSUEsTUFBTSxDQUFDQyxPQUFQLENBQWVJLElBQWYsS0FBd0IsTUFBNUIsRUFBb0M7QUFDbENOLElBQUFBLFVBQVUsQ0FBQ0MsTUFBRCxDQUFWO0FBQ0EsV0FBTyxLQUFQO0FBQ0Q7QUFDRjtBQUVEOzs7OztBQUdPLElBQU1zRyx3QkFBd0IsR0FBRztBQUN0Q0MsRUFBQUEsT0FEc0MsbUJBQzdCQyxNQUQ2QixFQUNOO0FBQUEsUUFDdEJDLFdBRHNCLEdBQ05ELE1BRE0sQ0FDdEJDLFdBRHNCO0FBRTlCN0gsSUFBQUEsU0FBUyxHQUFHNEgsTUFBWjtBQUNBRSxJQUFBQSxNQUFNLENBQUNDLE1BQVAsQ0FBY0gsTUFBTSxDQUFDSSxLQUFyQixFQUE0QjtBQUFFQyxNQUFBQSxJQUFJLEVBQUU7QUFBUixLQUE1QjtBQUNBSixJQUFBQSxXQUFXLENBQUNLLEtBQVosQ0FBa0I7QUFDaEIsc0JBQWdCVixpQkFEQTtBQUVoQixzQkFBZ0JDO0FBRkEsS0FBbEI7QUFJRDtBQVRxQyxDQUFqQzs7O0FBWVAsSUFBSSxPQUFPM0QsTUFBUCxLQUFrQixXQUFsQixJQUFpQ0EsTUFBTSxDQUFDcUUsUUFBNUMsRUFBc0Q7QUFDcERyRSxFQUFBQSxNQUFNLENBQUNxRSxRQUFQLENBQWdCQyxHQUFoQixDQUFvQlYsd0JBQXBCO0FBQ0Q7O2VBRWNBLHdCIiwiZmlsZSI6ImluZGV4LmNvbW1vbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbmltcG9ydCBYRVV0aWxzIGZyb20gJ3hlLXV0aWxzL21ldGhvZHMveGUtdXRpbHMnXHJcbmltcG9ydCB7XHJcbiAgVlhFVGFibGUsXHJcbiAgVGFibGUsXHJcbiAgSW50ZXJjZXB0b3JFeHBvcnRQYXJhbXMsXHJcbiAgSW50ZXJjZXB0b3JJbXBvcnRQYXJhbXMsXHJcbiAgQ29sdW1uQ29uZmlnLFxyXG4gIEV4cG9ydE9wdG9uc1xyXG59IGZyb20gJ3Z4ZS10YWJsZS9saWIvdnhlLXRhYmxlJ1xyXG5pbXBvcnQgWExTWCBmcm9tICd4bHN4J1xyXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXHJcblxyXG5sZXQgX3Z4ZXRhYmxlOiB0eXBlb2YgVlhFVGFibGVcclxuXHJcbmZ1bmN0aW9uIGdldEZvb3RlckNlbGxWYWx1ZSAoJHRhYmxlOiBUYWJsZSwgb3B0czogRXhwb3J0T3B0b25zLCByb3dzOiBhbnlbXSwgY29sdW1uOiBDb2x1bW5Db25maWcpIHtcclxuICB2YXIgY2VsbFZhbHVlID0gWEVVdGlscy50b1N0cmluZyhyb3dzWyR0YWJsZS4kZ2V0Q29sdW1uSW5kZXgoY29sdW1uKV0pXHJcbiAgcmV0dXJuIGNlbGxWYWx1ZVxyXG59XHJcblxyXG5mdW5jdGlvbiB0b0J1ZmZlciAod2JvdXQ6IGFueSkge1xyXG4gIGxldCBidWYgPSBuZXcgQXJyYXlCdWZmZXIod2JvdXQubGVuZ3RoKVxyXG4gIGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxyXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggIT09IHdib3V0Lmxlbmd0aDsgKytpbmRleCkgdmlld1tpbmRleF0gPSB3Ym91dC5jaGFyQ29kZUF0KGluZGV4KSAmIDB4RkZcclxuICByZXR1cm4gYnVmXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4cG9ydFhMU1ggKHBhcmFtczogSW50ZXJjZXB0b3JFeHBvcnRQYXJhbXMpIHtcclxuICBjb25zdCB7ICR0YWJsZSwgb3B0aW9ucywgY29sdW1ucywgZGF0YXMgfSA9IHBhcmFtc1xyXG4gIGNvbnN0IHsgc2hlZXROYW1lLCB0eXBlLCBpc0hlYWRlciwgaXNGb290ZXIsIG9yaWdpbmFsLCBtZXNzYWdlLCBmb290ZXJGaWx0ZXJNZXRob2QgfSA9IG9wdGlvbnNcclxuICBjb25zdCBjb2xIZWFkOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge31cclxuICBjb25zdCBmb290TGlzdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW11cclxuICBjb25zdCByb3dMaXN0ID0gZGF0YXNcclxuICBpZiAoaXNIZWFkZXIpIHtcclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIGNvbEhlYWRbY29sdW1uLmlkXSA9IFhFVXRpbHMudG9TdHJpbmcob3JpZ2luYWwgPyBjb2x1bW4ucHJvcGVydHkgOiBjb2x1bW4uZ2V0VGl0bGUoKSlcclxuICAgIH0pXHJcbiAgfVxyXG4gIGlmIChpc0Zvb3Rlcikge1xyXG4gICAgY29uc3QgeyBmb290ZXJEYXRhIH0gPSAkdGFibGUuZ2V0VGFibGVEYXRhKClcclxuICAgIGNvbnN0IGZvb3RlcnMgPSBmb290ZXJGaWx0ZXJNZXRob2QgPyBmb290ZXJEYXRhLmZpbHRlcihmb290ZXJGaWx0ZXJNZXRob2QpIDogZm9vdGVyRGF0YVxyXG4gICAgZm9vdGVycy5mb3JFYWNoKChyb3dzKSA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW06IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fVxyXG4gICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIGl0ZW1bY29sdW1uLmlkXSA9IGdldEZvb3RlckNlbGxWYWx1ZSgkdGFibGUsIG9wdGlvbnMsIHJvd3MsIGNvbHVtbilcclxuICAgICAgfSlcclxuICAgICAgZm9vdExpc3QucHVzaChpdGVtKVxyXG4gICAgfSlcclxuICB9XHJcbiAgY29uc3QgYm9vayA9IFhMU1gudXRpbHMuYm9va19uZXcoKVxyXG4gIGNvbnN0IHNoZWV0ID0gWExTWC51dGlscy5qc29uX3RvX3NoZWV0KChpc0hlYWRlciA/IFtjb2xIZWFkXSA6IFtdKS5jb25jYXQocm93TGlzdCkuY29uY2F0KGZvb3RMaXN0KSwgeyBza2lwSGVhZGVyOiB0cnVlIH0pXHJcbiAgLy8g6L2s5o2i5pWw5o2uXHJcbiAgWExTWC51dGlscy5ib29rX2FwcGVuZF9zaGVldChib29rLCBzaGVldCwgc2hlZXROYW1lKVxyXG4gIGNvbnN0IHdib3V0ID0gWExTWC53cml0ZShib29rLCB7IGJvb2tUeXBlOiB0eXBlLCBib29rU1NUOiBmYWxzZSwgdHlwZTogJ2JpbmFyeScgfSlcclxuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3RvQnVmZmVyKHdib3V0KV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfSlcclxuICAvLyDkv53lrZjlr7zlh7pcclxuICBkb3dubG9hZEZpbGUoYmxvYiwgb3B0aW9ucylcclxuICBpZiAobWVzc2FnZSAhPT0gZmFsc2UpIHtcclxuICAgIF92eGV0YWJsZS5tb2RhbC5tZXNzYWdlKHsgbWVzc2FnZTogX3Z4ZXRhYmxlLnQoJ3Z4ZS50YWJsZS5leHBTdWNjZXNzJyksIHN0YXR1czogJ3N1Y2Nlc3MnIH0pXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBkb3dubG9hZEZpbGUgKGJsb2I6IEJsb2IsIG9wdGlvbnM6IEV4cG9ydE9wdG9ucykge1xyXG4gIGlmICh3aW5kb3cuQmxvYikge1xyXG4gICAgY29uc3QgeyBmaWxlbmFtZSwgdHlwZSB9ID0gb3B0aW9uc1xyXG4gICAgaWYgKG5hdmlnYXRvci5tc1NhdmVCbG9iKSB7XHJcbiAgICAgIG5hdmlnYXRvci5tc1NhdmVCbG9iKGJsb2IsIGAke2ZpbGVuYW1lfS4ke3R5cGV9YClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhciBsaW5rRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxyXG4gICAgICBsaW5rRWxlbS50YXJnZXQgPSAnX2JsYW5rJ1xyXG4gICAgICBsaW5rRWxlbS5kb3dubG9hZCA9IGAke2ZpbGVuYW1lfS4ke3R5cGV9YFxyXG4gICAgICBsaW5rRWxlbS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmtFbGVtKVxyXG4gICAgICBsaW5rRWxlbS5jbGljaygpXHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGlua0VsZW0pXHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoX3Z4ZXRhYmxlLnQoJ3Z4ZS5lcnJvci5ub3RFeHAnKSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlcGxhY2VEb3VibGVRdW90YXRpb24gKHZhbDogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHZhbC5yZXBsYWNlKC9eXCIvLCAnJykucmVwbGFjZSgvXCIkLywgJycpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3N2IChjb2x1bW5zOiBDb2x1bW5Db25maWdbXSwgY29udGVudDogc3RyaW5nKSB7XHJcbiAgY29uc3QgbGlzdCA9IGNvbnRlbnQuc3BsaXQoJ1xcbicpXHJcbiAgY29uc3QgZmllbGRzOiBzdHJpbmdbXSA9IFtdXHJcbiAgY29uc3Qgcm93czogYW55W10gPSBbXVxyXG4gIGlmIChsaXN0Lmxlbmd0aCkge1xyXG4gICAgY29uc3Qgckxpc3QgPSBsaXN0LnNsaWNlKDEpXHJcbiAgICBsaXN0WzBdLnNwbGl0KCcsJykubWFwKHJlcGxhY2VEb3VibGVRdW90YXRpb24pXHJcbiAgICByTGlzdC5mb3JFYWNoKChyKSA9PiB7XHJcbiAgICAgIGlmIChyKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9XHJcbiAgICAgICAgci5zcGxpdCgnLCcpLmZvckVhY2goKHZhbCwgY29sSW5kZXgpID0+IHtcclxuICAgICAgICAgIGlmIChmaWVsZHNbY29sSW5kZXhdKSB7XHJcbiAgICAgICAgICAgIGl0ZW1bZmllbGRzW2NvbEluZGV4XV0gPSByZXBsYWNlRG91YmxlUXVvdGF0aW9uKHZhbClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHJvd3MucHVzaChpdGVtKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICByZXR1cm4geyBmaWVsZHMsIHJvd3MgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjaGVja0ltcG9ydERhdGEgKGNvbHVtbnM6IENvbHVtbkNvbmZpZ1tdLCBmaWVsZHM6IHN0cmluZ1tdLCByb3dzOiBhbnlbXSkge1xyXG4gIGxldCB0YWJsZUZpZWxkczogc3RyaW5nW10gPSBbXVxyXG4gIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICBsZXQgZmllbGQgPSBjb2x1bW4ucHJvcGVydHlcclxuICAgIGlmIChmaWVsZCkge1xyXG4gICAgICB0YWJsZUZpZWxkcy5wdXNoKGZpZWxkKVxyXG4gICAgfVxyXG4gIH0pXHJcbiAgcmV0dXJuIHRhYmxlRmllbGRzLmV2ZXJ5KChmaWVsZCkgPT4gZmllbGRzLmluY2x1ZGVzKGZpZWxkKSlcclxufVxyXG5cclxuZnVuY3Rpb24gaW1wb3J0WExTWCAocGFyYW1zOiBJbnRlcmNlcHRvckltcG9ydFBhcmFtcykge1xyXG4gIGNvbnN0IHsgY29sdW1ucywgb3B0aW9ucywgZmlsZSB9ID0gcGFyYW1zXHJcbiAgY29uc3QgJHRhYmxlOiBhbnkgPSBwYXJhbXMuJHRhYmxlXHJcbiAgY29uc3QgeyBfaW1wb3J0UmVzb2x2ZSB9ID0gJHRhYmxlXHJcbiAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcclxuICBmaWxlUmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgIGNvbnN0IHdvcmtib29rID0gWExTWC5yZWFkKGUudGFyZ2V0LnJlc3VsdCwgeyB0eXBlOiAnYmluYXJ5JyB9KVxyXG4gICAgY29uc3QgY3N2RGF0YTogc3RyaW5nID0gWExTWC51dGlscy5zaGVldF90b19jc3Yod29ya2Jvb2suU2hlZXRzLlNoZWV0MSlcclxuICAgIGNvbnN0IHsgZmllbGRzLCByb3dzIH0gPSBwYXJzZUNzdihjb2x1bW5zLCBjc3ZEYXRhKVxyXG4gICAgY29uc3Qgc3RhdHVzID0gY2hlY2tJbXBvcnREYXRhKGNvbHVtbnMsIGZpZWxkcywgcm93cylcclxuICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgJHRhYmxlLmNyZWF0ZURhdGEocm93cylcclxuICAgICAgICAudGhlbigoZGF0YTogYW55W10pID0+IHtcclxuICAgICAgICAgIGlmIChvcHRpb25zLm1vZGUgPT09ICdhcHBlbmQnKSB7XHJcbiAgICAgICAgICAgICR0YWJsZS5pbnNlcnRBdChkYXRhLCAtMSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICR0YWJsZS5yZWxvYWREYXRhKGRhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgaWYgKG9wdGlvbnMubWVzc2FnZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICBfdnhldGFibGUubW9kYWwubWVzc2FnZSh7IG1lc3NhZ2U6IFhFVXRpbHMudGVtcGxhdGUoX3Z4ZXRhYmxlLnQoJ3Z4ZS50YWJsZS5pbXBTdWNjZXNzJyksIFtyb3dzLmxlbmd0aF0pLCBzdGF0dXM6ICdzdWNjZXNzJyB9KVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMubWVzc2FnZSAhPT0gZmFsc2UpIHtcclxuICAgICAgX3Z4ZXRhYmxlLm1vZGFsLm1lc3NhZ2UoeyBtZXNzYWdlOiBfdnhldGFibGUudCgndnhlLmVycm9yLmltcEZpZWxkcycpLCBzdGF0dXM6ICdlcnJvcicgfSlcclxuICAgIH1cclxuICAgIGlmIChfaW1wb3J0UmVzb2x2ZSkge1xyXG4gICAgICBfaW1wb3J0UmVzb2x2ZShzdGF0dXMpXHJcbiAgICAgICR0YWJsZS5faW1wb3J0UmVzb2x2ZSA9IG51bGxcclxuICAgIH1cclxuICB9XHJcbiAgZmlsZVJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoZmlsZSlcclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlSW1wb3J0RXZlbnQgKHBhcmFtczogSW50ZXJjZXB0b3JJbXBvcnRQYXJhbXMpIHtcclxuICBpZiAocGFyYW1zLm9wdGlvbnMudHlwZSA9PT0gJ3hsc3gnKSB7XHJcbiAgICBpbXBvcnRYTFNYKHBhcmFtcylcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlRXhwb3J0RXZlbnQgKHBhcmFtczogSW50ZXJjZXB0b3JFeHBvcnRQYXJhbXMpIHtcclxuICBpZiAocGFyYW1zLm9wdGlvbnMudHlwZSA9PT0gJ3hsc3gnKSB7XHJcbiAgICBleHBvcnRYTFNYKHBhcmFtcylcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOWfuuS6jiB2eGUtdGFibGUg6KGo5qC855qE5aKe5by65o+S5Lu277yM5pSv5oyB5a+85Ye6IHhsc3gg5qC85byPXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVlhFVGFibGVQbHVnaW5FeHBvcnRYTFNYID0ge1xyXG4gIGluc3RhbGwgKHh0YWJsZTogdHlwZW9mIFZYRVRhYmxlKSB7XHJcbiAgICBjb25zdCB7IGludGVyY2VwdG9yIH0gPSB4dGFibGVcclxuICAgIF92eGV0YWJsZSA9IHh0YWJsZVxyXG4gICAgT2JqZWN0LmFzc2lnbih4dGFibGUudHlwZXMsIHsgeGxzeDogMSB9KVxyXG4gICAgaW50ZXJjZXB0b3IubWl4aW4oe1xyXG4gICAgICAnZXZlbnQuaW1wb3J0JzogaGFuZGxlSW1wb3J0RXZlbnQsXHJcbiAgICAgICdldmVudC5leHBvcnQnOiBoYW5kbGVFeHBvcnRFdmVudFxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuVlhFVGFibGUpIHtcclxuICB3aW5kb3cuVlhFVGFibGUudXNlKFZYRVRhYmxlUGx1Z2luRXhwb3J0WExTWClcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVlhFVGFibGVQbHVnaW5FeHBvcnRYTFNYXHJcbiJdfQ==
|
package/dist/index.js
ADDED
@@ -0,0 +1,270 @@
|
|
1
|
+
(function (global, factory) {
|
2
|
+
if (typeof define === "function" && define.amd) {
|
3
|
+
define("vxe-table-plugin-export-xlsx", ["exports", "xe-utils", "xlsx"], factory);
|
4
|
+
} else if (typeof exports !== "undefined") {
|
5
|
+
factory(exports, require("xe-utils"), require("xlsx"));
|
6
|
+
} else {
|
7
|
+
var mod = {
|
8
|
+
exports: {}
|
9
|
+
};
|
10
|
+
factory(mod.exports, global.XEUtils, global.XLSX);
|
11
|
+
global.VXETablePluginExportXLSX = mod.exports.default;
|
12
|
+
}
|
13
|
+
})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _xeUtils, _xlsx) {
|
14
|
+
"use strict";
|
15
|
+
|
16
|
+
Object.defineProperty(_exports, "__esModule", {
|
17
|
+
value: true
|
18
|
+
});
|
19
|
+
_exports["default"] = _exports.VXETablePluginExportXLSX = void 0;
|
20
|
+
_xeUtils = _interopRequireDefault(_xeUtils);
|
21
|
+
_xlsx = _interopRequireDefault(_xlsx);
|
22
|
+
|
23
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
24
|
+
|
25
|
+
/* eslint-disable no-unused-vars */
|
26
|
+
|
27
|
+
/* eslint-enable no-unused-vars */
|
28
|
+
var _vxetable;
|
29
|
+
|
30
|
+
function getFooterCellValue($table, opts, rows, column) {
|
31
|
+
var cellValue = _xeUtils["default"].toString(rows[$table.$getColumnIndex(column)]);
|
32
|
+
|
33
|
+
return cellValue;
|
34
|
+
}
|
35
|
+
|
36
|
+
function toBuffer(wbout) {
|
37
|
+
var buf = new ArrayBuffer(wbout.length);
|
38
|
+
var view = new Uint8Array(buf);
|
39
|
+
|
40
|
+
for (var index = 0; index !== wbout.length; ++index) {
|
41
|
+
view[index] = wbout.charCodeAt(index) & 0xFF;
|
42
|
+
}
|
43
|
+
|
44
|
+
return buf;
|
45
|
+
}
|
46
|
+
|
47
|
+
function exportXLSX(params) {
|
48
|
+
var $table = params.$table,
|
49
|
+
options = params.options,
|
50
|
+
columns = params.columns,
|
51
|
+
datas = params.datas;
|
52
|
+
var sheetName = options.sheetName,
|
53
|
+
type = options.type,
|
54
|
+
isHeader = options.isHeader,
|
55
|
+
isFooter = options.isFooter,
|
56
|
+
original = options.original,
|
57
|
+
message = options.message,
|
58
|
+
footerFilterMethod = options.footerFilterMethod;
|
59
|
+
var colHead = {};
|
60
|
+
var footList = [];
|
61
|
+
var rowList = datas;
|
62
|
+
|
63
|
+
if (isHeader) {
|
64
|
+
columns.forEach(function (column) {
|
65
|
+
colHead[column.id] = _xeUtils["default"].toString(original ? column.property : column.getTitle());
|
66
|
+
});
|
67
|
+
}
|
68
|
+
|
69
|
+
if (isFooter) {
|
70
|
+
var _$table$getTableData = $table.getTableData(),
|
71
|
+
footerData = _$table$getTableData.footerData;
|
72
|
+
|
73
|
+
var footers = footerFilterMethod ? footerData.filter(footerFilterMethod) : footerData;
|
74
|
+
footers.forEach(function (rows) {
|
75
|
+
var item = {};
|
76
|
+
columns.forEach(function (column) {
|
77
|
+
item[column.id] = getFooterCellValue($table, options, rows, column);
|
78
|
+
});
|
79
|
+
footList.push(item);
|
80
|
+
});
|
81
|
+
}
|
82
|
+
|
83
|
+
var book = _xlsx["default"].utils.book_new();
|
84
|
+
|
85
|
+
var sheet = _xlsx["default"].utils.json_to_sheet((isHeader ? [colHead] : []).concat(rowList).concat(footList), {
|
86
|
+
skipHeader: true
|
87
|
+
}); // 转换数据
|
88
|
+
|
89
|
+
|
90
|
+
_xlsx["default"].utils.book_append_sheet(book, sheet, sheetName);
|
91
|
+
|
92
|
+
var wbout = _xlsx["default"].write(book, {
|
93
|
+
bookType: type,
|
94
|
+
bookSST: false,
|
95
|
+
type: 'binary'
|
96
|
+
});
|
97
|
+
|
98
|
+
var blob = new Blob([toBuffer(wbout)], {
|
99
|
+
type: 'application/octet-stream'
|
100
|
+
}); // 保存导出
|
101
|
+
|
102
|
+
downloadFile(blob, options);
|
103
|
+
|
104
|
+
if (message !== false) {
|
105
|
+
_vxetable.modal.message({
|
106
|
+
message: _vxetable.t('vxe.table.expSuccess'),
|
107
|
+
status: 'success'
|
108
|
+
});
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
function downloadFile(blob, options) {
|
113
|
+
if (window.Blob) {
|
114
|
+
var filename = options.filename,
|
115
|
+
type = options.type;
|
116
|
+
|
117
|
+
if (navigator.msSaveBlob) {
|
118
|
+
navigator.msSaveBlob(blob, "".concat(filename, ".").concat(type));
|
119
|
+
} else {
|
120
|
+
var linkElem = document.createElement('a');
|
121
|
+
linkElem.target = '_blank';
|
122
|
+
linkElem.download = "".concat(filename, ".").concat(type);
|
123
|
+
linkElem.href = URL.createObjectURL(blob);
|
124
|
+
document.body.appendChild(linkElem);
|
125
|
+
linkElem.click();
|
126
|
+
document.body.removeChild(linkElem);
|
127
|
+
}
|
128
|
+
} else {
|
129
|
+
console.error(_vxetable.t('vxe.error.notExp'));
|
130
|
+
}
|
131
|
+
}
|
132
|
+
|
133
|
+
function replaceDoubleQuotation(val) {
|
134
|
+
return val.replace(/^"/, '').replace(/"$/, '');
|
135
|
+
}
|
136
|
+
|
137
|
+
function parseCsv(columns, content) {
|
138
|
+
var list = content.split('\n');
|
139
|
+
var fields = [];
|
140
|
+
var rows = [];
|
141
|
+
|
142
|
+
if (list.length) {
|
143
|
+
var rList = list.slice(1);
|
144
|
+
list[0].split(',').map(replaceDoubleQuotation);
|
145
|
+
rList.forEach(function (r) {
|
146
|
+
if (r) {
|
147
|
+
var item = {};
|
148
|
+
r.split(',').forEach(function (val, colIndex) {
|
149
|
+
if (fields[colIndex]) {
|
150
|
+
item[fields[colIndex]] = replaceDoubleQuotation(val);
|
151
|
+
}
|
152
|
+
});
|
153
|
+
rows.push(item);
|
154
|
+
}
|
155
|
+
});
|
156
|
+
}
|
157
|
+
|
158
|
+
return {
|
159
|
+
fields: fields,
|
160
|
+
rows: rows
|
161
|
+
};
|
162
|
+
}
|
163
|
+
|
164
|
+
function checkImportData(columns, fields, rows) {
|
165
|
+
var tableFields = [];
|
166
|
+
columns.forEach(function (column) {
|
167
|
+
var field = column.property;
|
168
|
+
|
169
|
+
if (field) {
|
170
|
+
tableFields.push(field);
|
171
|
+
}
|
172
|
+
});
|
173
|
+
return tableFields.every(function (field) {
|
174
|
+
return fields.includes(field);
|
175
|
+
});
|
176
|
+
}
|
177
|
+
|
178
|
+
function importXLSX(params) {
|
179
|
+
var columns = params.columns,
|
180
|
+
options = params.options,
|
181
|
+
file = params.file;
|
182
|
+
var $table = params.$table;
|
183
|
+
var _importResolve = $table._importResolve;
|
184
|
+
var fileReader = new FileReader();
|
185
|
+
|
186
|
+
fileReader.onload = function (e) {
|
187
|
+
var workbook = _xlsx["default"].read(e.target.result, {
|
188
|
+
type: 'binary'
|
189
|
+
});
|
190
|
+
|
191
|
+
var csvData = _xlsx["default"].utils.sheet_to_csv(workbook.Sheets.Sheet1);
|
192
|
+
|
193
|
+
var _parseCsv = parseCsv(columns, csvData),
|
194
|
+
fields = _parseCsv.fields,
|
195
|
+
rows = _parseCsv.rows;
|
196
|
+
|
197
|
+
var status = checkImportData(columns, fields, rows);
|
198
|
+
|
199
|
+
if (status) {
|
200
|
+
$table.createData(rows).then(function (data) {
|
201
|
+
if (options.mode === 'append') {
|
202
|
+
$table.insertAt(data, -1);
|
203
|
+
} else {
|
204
|
+
$table.reloadData(data);
|
205
|
+
}
|
206
|
+
});
|
207
|
+
|
208
|
+
if (options.message !== false) {
|
209
|
+
_vxetable.modal.message({
|
210
|
+
message: _xeUtils["default"].template(_vxetable.t('vxe.table.impSuccess'), [rows.length]),
|
211
|
+
status: 'success'
|
212
|
+
});
|
213
|
+
}
|
214
|
+
} else if (options.message !== false) {
|
215
|
+
_vxetable.modal.message({
|
216
|
+
message: _vxetable.t('vxe.error.impFields'),
|
217
|
+
status: 'error'
|
218
|
+
});
|
219
|
+
}
|
220
|
+
|
221
|
+
if (_importResolve) {
|
222
|
+
_importResolve(status);
|
223
|
+
|
224
|
+
$table._importResolve = null;
|
225
|
+
}
|
226
|
+
};
|
227
|
+
|
228
|
+
fileReader.readAsBinaryString(file);
|
229
|
+
}
|
230
|
+
|
231
|
+
function handleImportEvent(params) {
|
232
|
+
if (params.options.type === 'xlsx') {
|
233
|
+
importXLSX(params);
|
234
|
+
return false;
|
235
|
+
}
|
236
|
+
}
|
237
|
+
|
238
|
+
function handleExportEvent(params) {
|
239
|
+
if (params.options.type === 'xlsx') {
|
240
|
+
exportXLSX(params);
|
241
|
+
return false;
|
242
|
+
}
|
243
|
+
}
|
244
|
+
/**
|
245
|
+
* 基于 vxe-table 表格的增强插件,支持导出 xlsx 格式
|
246
|
+
*/
|
247
|
+
|
248
|
+
|
249
|
+
var VXETablePluginExportXLSX = {
|
250
|
+
install: function install(xtable) {
|
251
|
+
var interceptor = xtable.interceptor;
|
252
|
+
_vxetable = xtable;
|
253
|
+
Object.assign(xtable.types, {
|
254
|
+
xlsx: 1
|
255
|
+
});
|
256
|
+
interceptor.mixin({
|
257
|
+
'event.import': handleImportEvent,
|
258
|
+
'event.export': handleExportEvent
|
259
|
+
});
|
260
|
+
}
|
261
|
+
};
|
262
|
+
_exports.VXETablePluginExportXLSX = VXETablePluginExportXLSX;
|
263
|
+
|
264
|
+
if (typeof window !== 'undefined' && window.VXETable) {
|
265
|
+
window.VXETable.use(VXETablePluginExportXLSX);
|
266
|
+
}
|
267
|
+
|
268
|
+
var _default = VXETablePluginExportXLSX;
|
269
|
+
_exports["default"] = _default;
|
270
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(e,t){if("function"==typeof define&&define.amd)define("vxe-table-plugin-export-xlsx",["exports","xe-utils","xlsx"],t);else if("undefined"!=typeof exports)t(exports,require("xe-utils"),require("xlsx"));else{var o={exports:{}};t(o.exports,e.XEUtils,e.XLSX),e.VXETablePluginExportXLSX=o.exports.default}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,function(e,h,y){"use strict";function t(e){return e&&e.__esModule?e:{default:e}}var w;function o(e){var i=e.$table,t=e.options,o=e.columns,n=e.datas,a=t.sheetName,r=t.type,s=t.isHeader,l=t.isFooter,u=t.original,f=t.message,c=t.footerFilterMethod,d={},p=[],v=n;if(s&&o.forEach(function(e){d[e.id]=h.default.toString(u?e.property:e.getTitle())}),l){var m=i.getTableData().footerData;(c?m.filter(c):m).forEach(function(a){var r={};o.forEach(function(e){var t,o,n;r[e.id]=(t=i,o=a,n=e,h.default.toString(o[t.$getColumnIndex(n)]))}),p.push(r)})}var x=y.default.utils.book_new(),g=y.default.utils.json_to_sheet((s?[d]:[]).concat(v).concat(p),{skipHeader:!0});y.default.utils.book_append_sheet(x,g,a);var b=y.default.write(x,{bookType:r,bookSST:!1,type:"binary"});!function(e,t){if(window.Blob){var o=t.filename,n=t.type;if(navigator.msSaveBlob)navigator.msSaveBlob(e,"".concat(o,".").concat(n));else{var a=document.createElement("a");a.target="_blank",a.download="".concat(o,".").concat(n),a.href=URL.createObjectURL(e),document.body.appendChild(a),a.click(),document.body.removeChild(a)}}else console.error(w.t("vxe.error.notExp"))}(new Blob([function(e){for(var t=new ArrayBuffer(e.length),o=new Uint8Array(t),n=0;n!==e.length;++n)o[n]=255&e.charCodeAt(n);return t}(b)],{type:"application/octet-stream"}),t),!1!==f&&w.modal.message({message:w.t("vxe.table.expSuccess"),status:"success"})}function d(e){return e.replace(/^"/,"").replace(/"$/,"")}function n(e){var l=e.columns,u=e.options,t=e.file,f=e.$table,c=f._importResolve,o=new FileReader;o.onload=function(e){var t,o,n=y.default.read(e.target.result,{type:"binary"}),a=function(e){var t=e.split("\n"),n=[],a=[];if(t.length){var o=t.slice(1);t[0].split(",").map(d),o.forEach(function(e){if(e){var o={};e.split(",").forEach(function(e,t){n[t]&&(o[n[t]]=d(e))}),a.push(o)}})}return{fields:n,rows:a}}(y.default.utils.sheet_to_csv(n.Sheets.Sheet1)),r=a.fields,i=a.rows,s=(t=r,o=[],l.forEach(function(e){var t=e.property;t&&o.push(t)}),o.every(function(e){return t.includes(e)}));s?(f.createData(i).then(function(e){"append"===u.mode?f.insertAt(e,-1):f.reloadData(e)}),!1!==u.message&&w.modal.message({message:h.default.template(w.t("vxe.table.impSuccess"),[i.length]),status:"success"})):!1!==u.message&&w.modal.message({message:w.t("vxe.error.impFields"),status:"error"}),c&&(c(s),f._importResolve=null)},o.readAsBinaryString(t)}function a(e){if("xlsx"===e.options.type)return n(e),!1}function r(e){if("xlsx"===e.options.type)return o(e),!1}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.VXETablePluginExportXLSX=void 0,h=t(h),y=t(y);var i={install:function(e){var t=e.interceptor;w=e,Object.assign(e.types,{xlsx:1}),t.mixin({"event.import":a,"event.export":r})}};e.VXETablePluginExportXLSX=i,"undefined"!=typeof window&&window.VXETable&&window.VXETable.use(i);var s=i;e.default=s});
|