уменьшение кода

This commit is contained in:
Artyom Tsyrulnikov
2025-07-15 05:44:33 +03:00
parent e1fe966bcd
commit 2100fcd249
8 changed files with 386 additions and 1130 deletions

View File

@@ -210,8 +210,17 @@ export class Cell {
// Заменяем квалифицированные ссылки на ячейки
code = code.replace(QUALIFIED_REF_RE, (match) => {
const cellValue = this.sheet.workbook.getCell(match).evaluate();
return typeof cellValue === 'string' ? `"${cellValue}"` : String(cellValue ?? 0);
try {
const [sheetName] = match.split('!');
const sheet = this.sheet.workbook.getSheet(sheetName);
if (!sheet) {
return '"#REF!"';
}
const cellValue = this.sheet.workbook.getCell(match).evaluate();
return typeof cellValue === 'string' ? `"${cellValue}"` : String(cellValue ?? 0);
} catch (error) {
return '"#REF!"';
}
});
// Заменяем локальные ссылки на ячейки
@@ -220,14 +229,18 @@ export class Cell {
if (this.isFunction(match)) {
return match;
}
const qualifiedRef = `${this.sheet.name}!${match}`;
const cellValue = this.sheet.workbook.getCell(qualifiedRef).evaluate();
return typeof cellValue === 'string' ? `"${cellValue}"` : String(cellValue ?? 0);
try {
const qualifiedRef = `${this.sheet.name}!${match}`;
const cellValue = this.sheet.workbook.getCell(qualifiedRef).evaluate();
return typeof cellValue === 'string' ? `"${cellValue}"` : String(cellValue ?? 0);
} catch (error) {
return '"#REF!"';
}
});
// Заменяем функции Excel
const functions = this.sheet.workbook.getFunctions();
for (const [funcName, func] of Object.entries(functions)) {
for (const [funcName] of Object.entries(functions)) {
const funcRegex = new RegExp(`\\b${funcName}\\s*\\(`, 'gi');
code = code.replace(funcRegex, `__functions__.${funcName}(`);
}

View File

@@ -5,7 +5,7 @@ export function createExampleWorkbook(): Workbook {
const wb = new Workbook();
// Создаём листы
const sheetMain = wb.addSheet('Sheet1');
wb.addSheet('Sheet1');
// Заполняем данные с локальными ссылками
wb.setCell('Sheet1!A1', 10);
@@ -16,7 +16,7 @@ export function createExampleWorkbook(): Workbook {
wb.setCell('Sheet1!C1', '="Результат: " + A3'); // Строковая операция с локальной ссылкой
// Пример с квалифицированными ссылками (если есть несколько листов)
const countsSheet = wb.addSheet('Counts');
wb.addSheet('Counts');
wb.setCell('Counts!A1', 'N455');
wb.setCell('Sheet1!D1', '="Отчет по протоколу " + Counts!A1');

View File

@@ -1,11 +1,8 @@
// Пример шаблонных данных для отчета (только простые значения из Excel)
export const exampleTemplateData = {
// Заголовки
A1: 'Отчет о продажах',
A2: 'Период: Январь 2024',
A3: '',
// Таблица данных
A4: 'Товар',
B4: 'Количество',
C4: 'Цена',
@@ -14,42 +11,39 @@ export const exampleTemplateData = {
A5: 'Товар A',
B5: 100,
C5: 1500,
D5: 150000, // Простое значение вместо формулы
D5: 150000,
A6: 'Товар B',
B6: 50,
C6: 2000,
D6: 100000, // Простое значение вместо формулы
D6: 100000,
A7: 'Товар C',
B7: 75,
C7: 1200,
D7: 90000, // Простое значение вместо формулы
D7: 90000,
A8: '',
A9: 'Итого:',
D9: 340000, // Простое значение вместо формулы
D9: 340000,
// Дополнительные поля для расчетов
A11: 'НДС (20%):',
D11: 68000, // Простое значение вместо формулы
D11: 68000,
A12: 'Всего к оплате:',
D12: 408000, // Простое значение вместо формулы
// Поля для ссылок на правый лист (пока пустые, формулы можно добавить поверх)
D12: 408000,
A14: 'Скидка из расчетов:',
D14: '', // Пустое значение, формулу можно добавить поверх
D14: '',
A15: 'Итого со скидкой:',
D15: '' // Пустое значение, формулу можно добавить поверх
D15: ''
};
// Пример данных для листа вычислений
export const exampleCalculationsData = {
A1: 'Расчеты',
A2: 'Скидка:',
B2: '=Report!D9*0.05', // 5% скидка от общей суммы
B2: '=Report!D9*0.05',
A4: 'Дополнительные расчеты:',
A5: 'Средняя цена:',