|
@@ -4,12 +4,42 @@ var Excel =
|
|
|
open : function(data, filename, sheetname) {
|
|
|
this.name = sheetname || 'sheet1';
|
|
|
this.sheet = XLSX.utils.aoa_to_sheet(data, {raw: true});
|
|
|
+ this.autoWidthFunc(this.sheet, data);
|
|
|
if (filename.substr(-5).toLowerCase() !== '.xlsx') {
|
|
|
filename += '.xlsx';
|
|
|
}
|
|
|
this.openDownloadDialog(this.sheet2blob(this.sheet, this.name), filename);
|
|
|
},
|
|
|
|
|
|
+ autoWidthFunc : function (ws, data) {
|
|
|
+ // set worksheet max width per col
|
|
|
+ const colWidth = data.map(row =>
|
|
|
+ row.map(val => {
|
|
|
+ var l = val.toString().length;
|
|
|
+ var n = l + l*0.5;
|
|
|
+ // if null/undefined
|
|
|
+ if (val == null) {
|
|
|
+ return { wch: 10 };
|
|
|
+ } else if (val.toString().charCodeAt(0) > 255) {
|
|
|
+ // if chinese
|
|
|
+ return { wch: n * 2 };
|
|
|
+ } else {
|
|
|
+ return { wch: n };
|
|
|
+ }
|
|
|
+ })
|
|
|
+ );
|
|
|
+ // start in the first row
|
|
|
+ const result = colWidth[0];
|
|
|
+ for (let i = 1; i < colWidth.length; i++) {
|
|
|
+ for (let j = 0; j < colWidth[i].length; j++) {
|
|
|
+ if (result[j].wch < colWidth[i][j].wch) {
|
|
|
+ result[j].wch = colWidth[i][j].wch;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ws['!cols'] = result;
|
|
|
+ },
|
|
|
+
|
|
|
export : function (url, data) {
|
|
|
var self = this;
|
|
|
var filename = '';
|