UNPKG

use-on-demand

Version:
406 lines 15.4 kB
import { __read, __spread } from "tslib"; var BOM = '\uFEFF'; function getXLSX() { return import('xlsx'); } function getFileSaver() { return import('file-saver'); } function getJsZip() { return import('jszip'); } var xX_CVS_Excel_Helper = /** @class */ (function () { function xX_CVS_Excel_Helper() { } /** * 先将二维数组转成纯文本,重点是要处理可能在内容中出现的分隔符和双引号: */ xX_CVS_Excel_Helper.arrayToCsv = function (data, args) { if (args === void 0) { args = {}; } var columnDelimiter = args.columnDelimiter || ','; var lineDelimiter = args.lineDelimiter || '\n'; return data.reduce(function (csv, row) { var rowContent = Array.isArray(row) ? row.reduce(function (rowTemp, col) { var ret = rowTemp ? rowTemp + columnDelimiter : rowTemp; if (col) { var formatedCol = col.toString().replace(new RegExp(lineDelimiter, 'g'), ' '); ret += /,/.test(formatedCol) ? "\"" + formatedCol + "\"" : formatedCol; } return ret; }, '') : row; return (csv ? csv + lineDelimiter : '') + rowContent; }, ''); }; /** * 导出cvs文件 * 1.有空,要好好看看这段代码。可拓展面应该很广。 */ xX_CVS_Excel_Helper.exportCsv = function (inputData, filename) { if (filename === void 0) { filename = 'export.csv'; } // const csv = arrayToCsv(inputData); var csv = inputData; if (navigator.msSaveOrOpenBlob) { var blob = new Blob([BOM + csv], { type: 'text/csv;charset=utf-8;', }); navigator.msSaveOrOpenBlob(blob, filename); } else { var uri = encodeURI("data:text/csv;charset=utf-8," + BOM + csv); var downloadLink = document.createElement('a'); downloadLink.href = uri; downloadLink.download = filename; document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); } }; /** * 从【】,触发【下载Excel】操作 */ xX_CVS_Excel_Helper.downloadExcel = function (url, filename) { if (filename === void 0) { filename = 'export.xls'; } // 创建隐藏的可下载链接 var eleLink = document.createElement('a'); eleLink.download = filename; eleLink.style.display = 'none'; // 字符内容转变成blob地址 // const blob = new Blob([content]); eleLink.href = url; console.log('记录一下,export出的url,为多少。', url); // 触发点击 document.body.appendChild(eleLink); eleLink.click(); // 然后移除 document.body.removeChild(eleLink); }; /** * 从Excel文件中,获取某些行列。 */ xX_CVS_Excel_Helper.readArr_fromExcel = function (excel_file, // 传入的Excel文件 sheet_field, // 筛选特定字段 inputDom) { return new Promise(function (resolve, reject) { getXLSX().then(function (XLSX) { // 声明回调 var fileOnLoadCb = function (event) { console.log('event', event); var data = null; var workbook = null; var persons = []; // 读取数据 try { data = event.target.result; workbook = XLSX.read(data, { type: 'binary', }); } catch (e) { console.error('文件类型不正确,', e); reject(e); // TODO Promise失败返回 return; } // 表格的表格范围,可用于判断表头,数量是否正确 var from_To = ''; // 遍历每张表,读取 var _sheets = workbook.Sheets; for (var sheet in _sheets) { // 安全判断,是否有该属性 if (Object.prototype.hasOwnProperty.call(_sheets, sheet)) { // 表格范围 from_To = _sheets[sheet]['!ref']; console.log('表格范围', from_To); // 拼接列表 persons = persons.concat(XLSX.utils.sheet_to_json(_sheets[sheet])); // 此处,如果只取第一张sheet,就取消下面这行注释 // break } } inputDom.value = ''; // TODO 清除掉<input>的value值,这样可以实现多次重复上传。(针对onchange) console.log('读取的列表', persons); resolve(persons); // TODO Promise成功返回 }; var fileReader = new FileReader(); fileReader.onload = fileOnLoadCb; fileReader.readAsBinaryString(excel_file); }).catch(function (e) { console.error(e); reject(e); }); }); }; /** * 将文本,导出为【ZIP文件】 */ xX_CVS_Excel_Helper.prototype.export_txt_to_zip = function (th, jsonData, txtName, zipName) { return new Promise(function (resolve, reject) { require('script-loader!file-saver'); getJsZip().then(function (exports) { var JSZip = exports.default; var zip = new JSZip(); var txt_name = txtName || 'file'; var zip_name = zipName || 'file'; var data = jsonData; var txtData = th + "\r\n"; data.forEach(function (row) { var tempStr = ''; tempStr = row.toString(); txtData += tempStr + "\r\n"; }); zip.file(txt_name + ".txt", txtData); zip.generateAsync({ type: 'blob' }).then(function (blob) { getFileSaver().then(function (FileSaver) { FileSaver.saveAs(blob, zip_name + ".zip"); // FIXME ?????? resolve(); }).catch(function (e) { return [reject(e)]; }); }, function (err) { console.error(err); // alert(i18n.t('message.Export_Failure')); alert("\u5BFC\u51FA\u5931\u8D25\uFF01" + err); reject(err); }); }).catch(function (e) { console.error(e); reject(e); }); }); }; /** * */ xX_CVS_Excel_Helper.export_table_to_excel = function (id) { var theTable = document.getElementById(id); var oo = generateArray(theTable); var ranges = oo[1]; /* original data */ var data = oo[0]; var ws_name = 'SheetJS'; getXLSX().then(function (XLSX) { var wb = new WorkbookSimple(); var ws = sheet_from_array_of_arrays(XLSX, 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' }); getFileSaver().then(function (FileSaver) { FileSaver.saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), 'test.xlsx'); }).catch(function (e) { console.error(e); }); }).catch(function (e) { console.error(e); }); }; xX_CVS_Excel_Helper.prototype.export_json_to_excel = function (_a) { var _b = _a === void 0 ? {} : _a, header = _b.header, _data = _b._data, _c = _b.filename, filename = _c === void 0 ? 'excel-list' : _c, _d = _b.autoWidth, autoWidth = _d === void 0 ? true : _d; console.log('initial export'); /* original data */ var data = __spread(_data); data.unshift(header); var ws_name = 'SheetJS'; console.log('startingsheet_from_array_of_arrays'); getXLSX().then(function (XLSX) { var wb = new WorkbookSimple(); var ws = sheet_from_array_of_arrays(XLSX, data); if (autoWidth) { /*设置worksheet每列的最大宽度*/ var colWidth = data.map(function (row) { return row.map(function (val) { /*先判断是否为null/undefined*/ if (val == null) { return { wch: 10 }; } else if (val.toString().charCodeAt(0) > 255) { return { wch: val.toString().length * 2 }; } else { return { wch: val.toString().length }; } }); }); /*以第一行为初始值*/ var result = colWidth[0]; for (var i = 1; i < colWidth.length; i++) { for (var 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; } console.log(' wb.SheetNames.push(ws_name);'); /* add worksheet to workbook */ wb.SheetNames.push(ws_name); wb.Sheets[ws_name] = ws; console.log('wbout'); var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' }); getFileSaver().then(function (FileSaver) { FileSaver.saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), filename + '.xlsx'); }).catch(function (e) { console.error(e); }); }).catch(function (e) { console.error(e); }); }; return xX_CVS_Excel_Helper; }()); export { xX_CVS_Excel_Helper }; // // // // // // function generateArray(table) { var out = []; var rows = table.querySelectorAll('tr'); var ranges = []; var _loop_1 = function (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; // @ts-ignore if (cellValue !== '' && (cellValue == +cellValue)) { cellValue = +cellValue; } // Skip ranges ranges.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 Span if (rowspan || colspan) { // @ts-ignore rowspan = rowspan || 1; // @ts-ignore colspan = colspan || 1; // @ts-ignore ranges.push({ s: { r: R, c: outRow.length }, e: { r: R + rowspan - 1, c: outRow.length + colspan - 1 } }); } // Handle Value outRow.push(cellValue !== '' ? cellValue : null); // Handle Colspan if (colspan) { // @ts-ignore for (var k = 0; k < colspan - 1; ++k) { outRow.push(null); } } } out.push(outRow); }; for (var R = 0; R < rows.length; ++R) { _loop_1(R); } return [out, ranges]; } function s2ab(s) { var buf = new ArrayBuffer(s.length); var view = new Uint8Array(buf); for (var i = 0; i != s.length; ++i) { // @ts-ignore // tslint:disable-next-line // tslint:disable-next-line:no-bitwise view[i] = s.charCodeAt(i) & 0xFF; } return buf; } // // function Workbook(this: any) { // if (!(this instanceof Workbook)) { // return new Workbook(); // } // this.SheetNames = []; // this.Sheets = {}; // } // var WorkbookSimple = /** @class */ (function () { function WorkbookSimple() { this.SheetNames = []; this.Sheets = {}; } return WorkbookSimple; }()); function sheet_from_array_of_arrays(_XLSX, 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'; // @ts-ignore 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 datenum(_v, date1904) { var v = _v; if (date1904) { v += 1462; } var epoch = Date.parse(v); return (epoch - new Date(Date.UTC(1899, 11, 30)).valueOf()) / (24 * 60 * 60 * 1000); } //# sourceMappingURL=CVS_Excel_Helper.js.map