fastlion-amis
Version:
一种MIS页面生成工具
97 lines (96 loc) • 5.46 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.exportXLSXFromCross = exports.exportXLSX = void 0;
var tslib_1 = require("tslib");
var xlsx_1 = (0, tslib_1.__importDefault)(require("xlsx"));
var helper_1 = require("./helper");
var exportXLSX = function (columns, data, fileName) {
// 创建工作簿和工作表
var workbook = xlsx_1.default.utils.book_new();
var worksheet = xlsx_1.default.utils.aoa_to_sheet((0, tslib_1.__spreadArray)([columns], data, true));
// 将工作表添加到工作簿
xlsx_1.default.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
xlsx_1.default.writeFile(workbook, fileName);
};
exports.exportXLSX = exportXLSX;
var exportXLSXFromCross = function (tableHeadRows, columns, datas, fileName, keepFormat) {
if (keepFormat === void 0) { keepFormat = true; }
var headCellObjs = calcHeadCellObjs(tableHeadRows);
var bodyCellObjs = calcBodyCellObjs(datas, columns, keepFormat);
var workbook = xlsx_1.default.utils.book_new();
var worksheet = xlsx_1.default.utils.aoa_to_sheet([]);
for (var _i = 0, headCellObjs_1 = headCellObjs; _i < headCellObjs_1.length; _i++) {
var cellObj = headCellObjs_1[_i];
xlsx_1.default.utils.sheet_add_aoa(worksheet, [[cellObj]], { origin: cellObj.s });
}
xlsx_1.default.utils.sheet_add_aoa(worksheet, bodyCellObjs, { origin: { r: tableHeadRows.length, c: 0 } });
worksheet['!merges'] = headCellObjs;
worksheet['!cols'] = columns.map(function (column) { return ({ width: typeof column.label == 'string' ? (0, helper_1.getValueBitLength)(column.label) * 1.5 : 20 }); });
xlsx_1.default.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
xlsx_1.default.writeFile(workbook, fileName);
};
exports.exportXLSXFromCross = exportXLSXFromCross;
var calcHeadCellObjs = function (tableHeadRows) {
var fn = function (startRow, startCol, cell, array) {
var rowspan = cell.rowspan, colspan = cell.colspan;
var label = cell.rowspan == tableHeadRows.length - startRow ? cell.column.label : cell.label;
if (rowspan > 1 && colspan > 1) {
array.push({ s: { r: startRow, c: startCol }, e: { r: startRow + rowspan - 1, c: startCol + colspan - 1 }, v: label, t: 's' });
return startCol + colspan;
}
if (rowspan > 1) {
array.push({ s: { r: startRow, c: startCol }, e: { r: startRow + rowspan - 1, c: startCol }, v: label, t: 's' });
return startCol + colspan;
}
if (colspan > 1) {
array.push({ s: { r: startRow, c: startCol }, e: { r: startRow, c: startCol + colspan - 1 }, v: label, t: 's' });
return startCol + colspan;
}
array.push({ s: { r: startRow, c: startCol }, e: { r: startRow + rowspan - 1, c: startCol + colspan - 1 }, v: label, t: 's' });
return startCol + colspan;
};
var result = [];
for (var i = 0; i < tableHeadRows.length; i++) {
var row = tableHeadRows[i];
var startCol = 0;
for (var j = 0; j < i; j++) {
var preRow = tableHeadRows[j].filter(function (item) { return item.name != 'SF_COUNT'; });
for (var _i = 0, preRow_1 = preRow; _i < preRow_1.length; _i++) {
var item = preRow_1[_i];
if (item.rowspan > i) {
startCol += item.colspan;
}
}
}
for (var _a = 0, row_1 = row; _a < row_1.length; _a++) {
var cell = row_1[_a];
startCol = fn(i, startCol, cell, result);
}
}
return result;
};
var calcBodyCellObjs = function (datas, columns, keepFormat) {
if (keepFormat === void 0) { keepFormat = true; }
return datas.map(function (data) { return columns.map(function (column) {
var _a, _b, _c, _d, _e, _f;
var dataTypeArr = ['number', 'static-number', 'input-number', 'progress', 'static-progress'];
var isNumerical = dataTypeArr.includes(column.type);
var isMapping = column.type == 'mapping';
var isPercentage = column.pristine.isPercentage;
var prefix = column.pristine.prefix;
var name = column.name;
var isCurrency = Boolean(prefix) && column.type == 'number';
var precision = (_a = column.pristine.precision) !== null && _a !== void 0 ? _a : 0;
var place = new Array(precision).fill(0).join('');
var numFormat = precision > 0 ? "0." + place + "_ " : '0_ ';
var perFormat = precision > 0 ? "0." + place + "%" : '0%';
var curFormat = prefix + "#,##0." + place + ";" + prefix + "-#,##0." + place;
var value = (_b = data[name]) !== null && _b !== void 0 ? _b : undefined;
return {
v: isPercentage && !isNaN(+value) ? +(value) / 100 : isMapping ? (_f = (_e = (_d = (_c = column.map) === null || _c === void 0 ? void 0 : _c[value]) === null || _d === void 0 ? void 0 : _d.replace) === null || _e === void 0 ? void 0 : _e.call(_d, /\n|\r|<[^>]*>/g, '')) !== null && _f !== void 0 ? _f : value : value !== null && value !== void 0 ? value : '',
t: isNumerical || isPercentage ? 'n' : 's',
z: !keepFormat ? undefined : (isCurrency ? curFormat : isPercentage ? perFormat : isNumerical ? numFormat : undefined)
};
}); });
};
//# sourceMappingURL=./utils/xlsx.js.map