로드된 통합 문서 구조 세대
구조 세대를 사용하면 리더가 저비용 스냅샷을 유지하고 자신이 의존하는 통합 문서 토폴로지가 변경된 후의 순회를 거부할 수 있습니다
세대 소스
| 엔진 | 셀 저장소 세대 | 워크시트 컬렉션 세대 |
|---|---|---|
| 클래식 XLS | TXLSWorksheet.CellStructureGeneration | TXLSWorksheets.StructureGeneration |
| XLSX | TXLSXWorksheet.CellStructureGeneration 또는 TXLSXCells.StructureGeneration | TXLSXSheets.StructureGeneration |
각 속성은 읽기 전용 UInt64 값이며, 변경되는 정확한 양은 계약의 대상이 아닙니다
무효화하는 작업
저장된 셀 생성, 제거 또는 지우기는 토폴로지가 실제로 변경될 때 셀 저장소 세대를 변경합니다
행 또는 열 삽입과 삭제, 좌표 이동, 패킹된 추가 또는 실체화, 명시적인 셀 인덱스 재빌드도 셀 저장소 순회 상태를 무효화합니다
워크시트 추가, 삭제, 이동 또는 지우기는 컬렉션이 실제로 변경될 때 워크시트 컬렉션 세대를 변경합니다
무효화하지 않는 작업
기존 셀의 값, 수식, 캐시된 값 또는 서식을 변경해도 해당 셀 저장소 세대는 변경되지 않습니다
워크시트 이름 바꾸기나 활성화는 워크시트 컬렉션 세대를 변경하지 않으며, 아무 효과 없는 이동, 없는 항목의 삭제 또는 이미 빈 컬렉션의 지우기는 현재 세대를 유지합니다
유효성 검사
이전 세대를 위해 만들어진 순회 상태를 진행하거나 읽기 전에 XlsValidateStructureGeneration을 호출하십시오
불일치 시 EXLSLoadedCellCursorInvalidated가 발생하므로 호출자는 구조적 무효화를 데이터 또는 서식 오류와 구별할 수 있습니다
ExpectedGeneration := Worksheet.CellStructureGeneration;
{ Read or retain traversal state }
XlsValidateStructureGeneration(
ExpectedGeneration,
Worksheet.CellStructureGeneration);
클래식 통합 문서 커서
IXLSWorkbook.CreateLoadedCellCursor는 클래식 통합 문서의 집계 세대를 캡처하고 모든 MoveNext 및 Current 호출 전에 이를 검증합니다
커서는 할당된 스파스 저장소 분기를 직접 순회하며 상수 커서 상태로 소유된 TXLSLoadedCellSnapshot 값을 반환합니다
부울 오버로드는 독립적으로 스타일이 지정된 저장된 빈 셀을 포함할지 여부를 고정합니다. 상속된 행, 열, 워크시트 서식은 빈 커서 항목을 만들지 않습니다
XLSX 통합 문서 커서
TXLSXWorkbook.CreateLoadedCellCursor는 통합 문서 수명 리스와 모든 워크시트 셀 저장소 및 워크시트 컬렉션이 공유하는 집계 토폴로지 세대를 캡처합니다
실체화된 경로는 스파스 행 블록을 직접 읽고, 패킹된 경로는 셀을 실체화하거나 스냅샷에 내부 포인터를 유지하지 않고 패킹된 반복기를 재사용합니다
부울 오버로드는 어느 저장소 표현에서든 스타일만 있는 저장된 빈 셀을 포함할 수 있으며, 스타일 없는 Empty 및 Null 자리 표시자는 계속 제외됩니다
통합 문서를 해제하면 워크시트 저장소가 해제되기 전에 리스가 무효화되므로 이후의 커서 접근은 EXLSLoadedCellCursorInvalidated를 발생시킵니다
동시성 경계
세대 검사는 fail-fast 감지만 제공하며 동시 통합 문서 변경과 순회를 스레드로부터 안전하게 만들지 않습니다