spartaxx.exportexcel
Version:
A npm package to export data to Excel using exceljs.
138 lines (137 loc) • 6.51 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ExportExcel = void 0;
const ExcelJS = __importStar(require("exceljs"));
const path_1 = __importDefault(require("path"));
const fs_1 = __importDefault(require("fs"));
const ExportExcel = (options) => __awaiter(void 0, void 0, void 0, function* () {
var _a, _b;
let outputString = null;
let result = null;
const { data, columnsList, fileExportConfig, isFileTypeBase64, sheetName = "Sheet1" } = options;
try {
const workbook = new ExcelJS.Workbook();
const worksheet = workbook.addWorksheet(sheetName);
worksheet.columns = columnsList.map(col => ({
header: col.DisplayName,
key: col.ModelPropertyName,
width: 20,
}));
const filteredData = data.map(item => {
const filteredRow = {};
columnsList.forEach(col => {
filteredRow[col.ModelPropertyName] = item[col.ModelPropertyName];
});
return filteredRow;
});
filteredData.forEach(row => {
worksheet.addRow(row);
});
const headerRow = worksheet.getRow(1);
headerRow.eachCell({ includeEmpty: true }, cell => {
cell.font = { bold: true };
cell.fill = {
type: 'pattern',
pattern: 'solid',
fgColor: { argb: 'FFFF00' }
};
});
const lastRowNumber = ((_a = worksheet.lastRow) === null || _a === void 0 ? void 0 : _a.number) || 1;
const lastColumnNumber = worksheet.columns.length;
for (let rowIndex = 1; rowIndex <= lastRowNumber; rowIndex++) {
const row = worksheet.getRow(rowIndex);
for (let colIndex = 1; colIndex <= lastColumnNumber; colIndex++) {
const cell = row.getCell(colIndex);
cell.border = {
top: { style: 'thin', color: { argb: 'FF000000' } },
left: { style: 'thin', color: { argb: 'FF000000' } },
bottom: { style: 'thin', color: { argb: 'FF000000' } },
right: { style: 'thin', color: { argb: 'FF000000' } }
};
}
}
worksheet.columns.forEach(column => {
if (column.eachCell) {
let maxLength = column.header ? column.header.toString().length : 20;
column.eachCell({ includeEmpty: true }, cell => {
const cellValue = cell.value ? cell.value.toString() : "";
maxLength = Math.max(maxLength, cellValue.length);
});
column.width = maxLength + 2;
}
});
if (isFileTypeBase64) {
const buffer = yield workbook.xlsx.writeBuffer();
outputString = Buffer.from(buffer).toString('base64');
}
else {
const fileName = fileExportConfig && fileExportConfig != null ?
(_b = fileExportConfig.FileName) === null || _b === void 0 ? void 0 : _b.replace("@@datetimestamp@@", yield getFileTimestamp()) : "";
const exportExcelFilePath = fileExportConfig && fileExportConfig != null ?
`${fileExportConfig.AppDirName}${fileExportConfig.ExportDirName}${fileName}` : "";
const downloadExcelUrl = fileExportConfig && fileExportConfig != null ?
`${fileExportConfig.AppBaseURL}${fileExportConfig.ExportDirName}${fileName}` : "";
const directoryPath = path_1.default.dirname(exportExcelFilePath);
yield fs_1.default.promises.mkdir(directoryPath, { recursive: true });
yield workbook.xlsx.writeFile(exportExcelFilePath);
result = {
SharedPath: exportExcelFilePath,
ServerUrl: downloadExcelUrl
};
}
}
catch (error) {
console.log("Failed");
outputString = null;
result = null;
}
return isFileTypeBase64 ? outputString : result;
});
exports.ExportExcel = ExportExcel;
function getFileTimestamp() {
return __awaiter(this, void 0, void 0, function* () {
const currentDate = new Date();
const year = currentDate.getFullYear();
const month = ('0' + (currentDate.getMonth() + 1)).slice(-2);
const day = ('0' + currentDate.getDate()).slice(-2);
const hours = ('0' + currentDate.getHours()).slice(-2);
const minutes = ('0' + currentDate.getMinutes()).slice(-2);
const seconds = ('0' + currentDate.getSeconds()).slice(-2);
return `${year}${month}${day}${hours}${minutes}${seconds}`;
});
}