исправлено складывание ячеек

This commit is contained in:
2025-07-22 08:50:31 +03:00
parent 2671afce26
commit a71f018608
3 changed files with 61 additions and 19 deletions

View File

@@ -21,7 +21,7 @@ export function useMultiSheetEngine({
const workbookRef = useRef<Workbook | null>(null)
const [isCalculating, setIsCalculating] = useState(false)
const [revision, setRevision] = useState(0) // Новый счетчик для обновлений
const debouncedRecalcTimeoutRef = useRef<number | null>(null)
const debouncedRecalcTimeoutRef = useRef<NodeJS.Timeout | null>(null)
const isRecalculatingRef = useRef(false)
// Храним изначальные данные шаблона для сравнения
@@ -149,8 +149,21 @@ export function useMultiSheetEngine({
const cellName = columnToLabel(col) + (row + 1)
const qualifiedName = `${sheetName}!${cellName}`
// Устанавливаем значение в движке без пересчета
workbookRef.current.setCell(qualifiedName, value)
// Конвертируем пустую строку в null
const cellValue: CellValue = value === '' ? null : value
// Если значение начинается с =, то это формула
if (typeof cellValue === 'string' && cellValue.startsWith('=')) {
workbookRef.current.setCell(qualifiedName, cellValue)
} else {
// Пытаемся конвертировать в число, если возможно
const numValue = Number(cellValue)
if (!isNaN(numValue) && cellValue !== null && cellValue !== '') {
workbookRef.current.setCell(qualifiedName, numValue)
} else {
workbookRef.current.setCell(qualifiedName, cellValue)
}
}
},
[]
)
@@ -163,8 +176,21 @@ export function useMultiSheetEngine({
const cellName = columnToLabel(col) + (row + 1)
const qualifiedName = `${sheetName}!${cellName}`
// Устанавливаем значение в движке
workbookRef.current.setCell(qualifiedName, value)
// Конвертируем пустую строку в null
const cellValue: CellValue = value === '' ? null : value
// Если значение начинается с =, то это формула
if (typeof cellValue === 'string' && cellValue.startsWith('=')) {
workbookRef.current.setCell(qualifiedName, cellValue)
} else {
// Пытаемся конвертировать в число, если возможно
const numValue = Number(cellValue)
if (!isNaN(numValue) && cellValue !== null && cellValue !== '') {
workbookRef.current.setCell(qualifiedName, numValue)
} else {
workbookRef.current.setCell(qualifiedName, cellValue)
}
}
// Запускаем безопасный пересчет
safeRecalc()