UNPKG

step-sequence-generator

Version:

A step sequence generator for figure skating programs

62 lines (61 loc) 2.23 kB
"use strict"; 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;