HotXLS 문서

안전한 피벗 워크시트 구체화

버전 2.384.90은 격리된 피벗 평가와 보호된 워크시트 결과 교체를 추가하고, 버전 2.384.92는 호출 때마다 해석되는 정의된 이름과 테이블로 지원되는 로컬 소스를 확장합니다

뷰 구체화

if Workbook.RefreshPivotCache(Pivot.CacheId) <> 1 then
  raise Exception.Create('Pivot cache refresh failed');
if Workbook.MaterializePivotTable(Pivot) <> 1 then
  raise Exception.Create('Pivot output cannot be replaced safely');

TXLSXWorkbook.MaterializePivotTable(ATable: TXLSPivotTable): Integer는 현재 캐시에서 결과를 계산해 뷰의 FirstRow, FirstCol 위치에 놓습니다. 성공 시 1을, 지원되지 않는 소스, 안전하지 않은 대상, 평가 실패, 거부된 통합 문서 변경에는 -1을 반환합니다

새로 고침과 워크시트 재계산은 명시적 작업으로 남습니다. 성공적인 구체화는 계산 종속성을 무효화하므로 호출자는 필요할 때 다운스트림 수식을 재계산할 수 있습니다

기본 오버로드는 빈 대상 셀과 같은 뷰가 이전에 소유했던 바뀌지 않은 셀을 받습니다. 전체 출력 사각형 안 어디든 소유자 없는 점유 셀이 있으면, 결과 writer가 채우지 않는 빈틈까지 포함해 작업이 거부됩니다

if Workbook.MaterializePivotTable(Pivot, True) <> 1 then
  raise Exception.Create('Existing Pivot values cannot be adopted safely');

TXLSXWorkbook.MaterializePivotTable(ATable: TXLSPivotTable; AAdoptExisting: Boolean): Integer는 첫 구체화 때 뷰가 선언한 이전 사각형 안의 기존 스칼라 셀을 명시적으로 수용할 수 있습니다. 수식, 배열 멤버, 리치 텍스트, 메타데이터를 담은 셀, 그 사각형 밖의 내용을 교체하는 것은 허가하지 않습니다

소유권, 크기 조절, 이동

뷰는 기록된 셀의 정확한 좌표와 타입 지정 값 스냅샷을 유지합니다. XLSX 저장은 이 소유권을 피벗 정의에 보존하므로 다시 연 뒤의 갱신이 그것을 검증할 수 있습니다

바뀐 타입 지정 내용이나 제거된 비어 있지 않은 소유 셀은 전체 갱신을 거부합니다. 숫자 하위 타입은 표준 숫자 표현을 공유하고, 텍스트, Boolean, 오류는 서로 다른 식별을 유지합니다

결과를 줄이거나 옮길 때는 더 이상 만들어지지 않는 바뀌지 않은 소유 값만 정리됩니다. 기존 셀 개체, 서식, 주석은 계속 쓸 수 있고 무관한 셀은 소유 집합 밖으로 남습니다

FirstRow나 FirstCol을 바꾸면 다음 출력이 이동하고 이전 소유 좌표는 정리용으로 남습니다. 빈 결과는 소유 값을 정리하고 앵커 전용 위치를 유지합니다

격리된 미리 보기

function TXLSPivotTable.MakePreview(AWriter: TlxPivotResultWriter): Integer;
property TXLSPivotTable.EvaluationSourceTable: TXLSPivotTable;

TXLSPivotTable.MakePreview는 계산 필드 플레이스홀더를 포함해 캐시와 뷰의 독립 복사본을 쓰고 평가 뒤 버립니다. 평범한 Make는 기존 살아 있는 캐시 동작을 유지합니다

writer는 0 기반 행·열 오프셋과 타입 지정 값을 받습니다. 반환 값은 writer 호출 횟수와 별개인 Make의 집계 셀 개수를 따릅니다. 캐시나 writer가 없으면 0을 반환하고, 평가나 writer 예외는 전파됩니다

호출자 레코드 술어와 등록된 소유자 필터는 통합 문서 Slicer 선택을 포함해 미리 보기에서도 활성 상태입니다. 콜백은 임시 평가 뷰와 그 임시 캐시를 받습니다

TXLSPivotTable.EvaluationSourceTable은 평범한 평가에서는 살아 있는 뷰를, 미리 보기에서는 원래 살아 있는 뷰를 반환합니다. 콜백이 연결된 뷰를 식별해야 할 때 쓰고, 평가된 레코드는 콜백의 임시 Cache에서 읽으세요

콜백 소유자는 호출자 소유로 남습니다. 콜백이나 미리 보기 호출이 끝난 뒤 미리 보기 개체와 그 레코드를 보존해서는 안 됩니다

안전 경계

구체화에는 같은 통합 문서에 등록된 뷰·캐시와 지원되는 로컬 사각형·정의된 이름·테이블 소스가 필요합니다. 소스 해석은 현재 이름과 테이블 범위를 따르며, 지원되지 않거나 해석되지 않는 소스는 변경 전에 거부됩니다

현재 소스 지오메트리, 다른 피벗 위치, 구조화 테이블, 쿼리 결과 범위, 병합 셀, 고정·동적 배열은 새 출력이나 정리가 필요한 오래된 소유 셀과 교차할 수 없습니다. 테이블 합계는 캐시 레코드에서 제외되더라도 계속 보호됩니다

검증과 출력 스테이징은 읽기 리스 아래에서 실행되고, 그 뒤에 평범한 통합 문서 변경 가드와 세대 검사가 따릅니다. 고정된 읽기 전용 통합 문서 뷰는 셀을 교체하거나 지오메트리를 바꾸지 않고 구체화를 거부합니다

필터는 읽기 전용이어야 하고 통합 문서의 평범한 단일 writer 계약을 따릅니다. 격리 덕분에 정상적인 미리 보기 계산은 살아 있는 캐시를 바꾸지 않지만, 따로 잡아 둔 살아 있는 개체로의 임의 콜백 쓰기는 롤백할 수 없습니다

이 작업은 라이브러리의 계산 결과 레이아웃을 구체화합니다. 완전한 네이티브 피벗 레이아웃 작성, Slicer UI 만들기, 크로스 필터 데이터 없음 표시 평가는 별도의 기능으로 남습니다