уменьшение кода
This commit is contained in:
@@ -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}(`);
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
|
||||
|
||||
@@ -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: 'Средняя цена:',
|
||||
|
||||
Reference in New Issue
Block a user