Исправлены ячейки

This commit is contained in:
2025-07-18 15:10:20 +03:00
parent 7ba38b3284
commit a52d57fd46
2 changed files with 32 additions and 19 deletions

View File

@@ -116,7 +116,6 @@ interface CellProps {
isMainCell: boolean isMainCell: boolean
rowSpan?: number rowSpan?: number
colSpan?: number colSpan?: number
mergedValue?: any
} }
} }
@@ -191,11 +190,8 @@ const Cell = memo(
} }
} }
// Используем значение из объединенной ячейки, если доступно // Используем обычное значение displayValue для всех ячеек, включая объединенные
const cellDisplayValue = const cellDisplayValue = displayValue
mergedCellInfo?.isMainCell && mergedCellInfo.mergedValue !== undefined
? String(mergedCellInfo.mergedValue)
: displayValue
const handleClick = useCallback(() => { const handleClick = useCallback(() => {
setActiveSheet(sheetType) setActiveSheet(sheetType)
@@ -413,7 +409,7 @@ const CellRenderer = ({
isMainCell: mergedCellInfo.isMainCell, isMainCell: mergedCellInfo.isMainCell,
rowSpan: mergedCellInfo.spans?.rowSpan, rowSpan: mergedCellInfo.spans?.rowSpan,
colSpan: mergedCellInfo.spans?.colSpan, colSpan: mergedCellInfo.spans?.colSpan,
mergedValue: mergedCellInfo.mergedCell?.value, // Убираем mergedValue - будем использовать актуальные данные из движка
} }
: undefined : undefined
@@ -716,6 +712,9 @@ const DualSpreadsheet: FC<DualSpreadsheetProps> = ({
useEffect(() => { useEffect(() => {
const reportTemplate = templateData?.[SHEET_NAMES.report] const reportTemplate = templateData?.[SHEET_NAMES.report]
if (reportTemplate) { if (reportTemplate) {
// Очищаем старые значения
initialTemplateValues.current = {}
Object.entries(reportTemplate).forEach(([cellName, value]) => { Object.entries(reportTemplate).forEach(([cellName, value]) => {
initialTemplateValues.current[cellName] = String(value) initialTemplateValues.current[cellName] = String(value)
}) })

View File

@@ -62,17 +62,31 @@ export function useMultiSheetEngine({
workbookRef.current!.addSheet(sheetConfig.name) workbookRef.current!.addSheet(sheetConfig.name)
}) })
// Загружаем начальные данные // Увеличиваем ревизию для начальной отрисовки
if (Object.keys(initialData).length > 0) {
workbookRef.current.fromJSON(initialData)
// Первый пересчет для инициализации всех значений
safeRecalc()
} else {
// Увеличиваем ревизию, чтобы вызвать начальную отрисовку
setRevision((r) => r + 1) setRevision((r) => r + 1)
} }
}, [sheets])
// Отдельный useEffect для перезагрузки данных при изменении initialData
useEffect(() => {
if (!workbookRef.current) return
if (Object.keys(initialData).length > 0) {
// Очищаем только те листы, для которых есть новые данные
for (const sheetName of Object.keys(initialData)) {
const sheet = workbookRef.current.getSheet(sheetName)
if (sheet) {
sheet.cells.clear()
} }
}, [initialData, safeRecalc, sheets]) // Восстанавливаем зависимости }
workbookRef.current.fromJSON(initialData)
safeRecalc()
} else {
// Если данных нет, просто обновляем ревизию
setRevision((r) => r + 1)
}
}, [initialData, safeRecalc])
// Синхронизация всех листов из движка // Синхронизация всех листов из движка
// const syncAllSheetsFromEngine = useCallback(() => { // const syncAllSheetsFromEngine = useCallback(() => {