step-sequence-generator
Version:
A step sequence generator for figure skating programs
62 lines (61 loc) • 2.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BaseExcelParser = void 0;
class BaseExcelParser {
constructor(columnNames) {
this.columnNames = columnNames;
}
parse(workBook) {
const firstSheetName = this.getFirstSheetsName(workBook);
const sheet = workBook.Sheets[firstSheetName];
const lastLineNumber = this.findLastLineNumber(this.cleanUpAndSortSheetKeys(Object.keys(sheet)));
const columnNameKeys = Object.keys(this.columnNames);
return this.createData(sheet, lastLineNumber, columnNameKeys);
}
getFirstSheetsName(workBook) {
return workBook.SheetNames[0];
}
findLastLineNumber(arr) {
const numbers = [];
arr.forEach((item) => {
const pattern = /\d+/;
const number = item.match(pattern);
if (Number.isInteger(Number(number)))
numbers.push(Number(number));
});
numbers.sort((a, b) => b - a);
return numbers.length > 0 ? numbers[0] : 1;
}
cleanUpAndSortSheetKeys(arr) {
return arr.filter((item) => !item.includes('!')).sort((a, b) => a.localeCompare(b));
}
createData(sheet, lastLineNumber, columnNameKeys) {
const data = [];
for (let i = 2; i <= lastLineNumber; i++) {
const line = this.createLine(sheet, columnNameKeys, i);
data.push(line);
}
return data;
}
createLine(sheet, columnNameKeys, index) {
const line = new Map();
for (const key of columnNameKeys) {
const cellKey = `${this.columnNames[key]}${index}`;
if (key === this.columnNames.ID) {
line.set(this.columnNames[key], cellKey);
continue;
}
let cellValue;
if (sheet[cellKey]) {
cellValue = String(sheet[cellKey].v).trim().toLowerCase();
}
else {
// console.warn(`Ячейка ${cellKey} не найдена.`);
cellValue = null;
}
line.set(this.columnNames[key], cellValue);
}
return line;
}
}
exports.BaseExcelParser = BaseExcelParser;