HotXLS 문서

통합 문서 인프라 API

이 공개 멤버들은 I/O 검사, 직렬화기 구현, 통합 문서 간 계산 조율을 지원하는 통합을 위해 존재하며, 통합 문서 멤버는 lxHandleX에, 워크스페이스 그래프는 lxDepGraph에 선언되어 있습니다

평범한 애플리케이션은 셀 서식, SaveAs, Recalculate, 외부 통합 문서 워크스페이스 API를 먼저 사용해야 합니다. 스타일 풀 등록과 그래프 스케줄링은 라이브러리의 직렬화기와 계산 엔진과 같은 인덱스·수명 규약을 요구합니다

I/O 관찰과 복구

TXLSXWorkbook.OnReadCell은 XLSX 파싱 동안 구체화된 각 셀의 시트 인덱스, 행, 열, 저장 값, 수식을 쓰기 가능한 Cancel 플래그와 함께 받습니다. TXLSXWorkbook.OnWriteCell은 셀이 직렬화되기 전에 쓰기 가능한 출력 값과 Skip, Cancel 플래그를 받으므로, 호스트는 직접 스트림 API로 통합 문서 API를 대체하지 않고도 출력을 변형하거나 생략할 수 있습니다

두 콜백 모두 1 기반 워크시트·셀 좌표를 쓰고 선언된 타입은 TXLSXCellReadEvent와 TXLSXCellWriteEvent입니다. 콜백은 활성 I/O 작업 안에서 실행되므로 콜백에서 같은 통합 문서에 또 다른 작업을 시작하지 마세요

TXLSXWorkbook.RecoveryMode는 기본값 False이며 지원되는 워크시트 XML 파싱 실패를 경고 진단으로 바꿔 열기를 계속하게 하고, 일부만 복구된 워크시트 내용만 남길 수 있습니다. 읽을 수 없는 ZIP 패키지에서의 복구를 보장하지 않으므로 저장 전에 진단과 복구된 데이터를 확인하세요

TXLSXWorkbook.FireProgress는 단계, 상태, 현재 개수, 총 개수를 할당된 진행 핸들러에 전달합니다. 레거시 핸들러는 작업 알림을 받고 확장 핸들러는 모든 상태를 받습니다. 확장 핸들러는 취소를 요청할 수 있지만 쓰기 종료 알림은 이미 커밋된 출력을 되돌릴 수 없습니다

TXLSXWorkbook.AddDiagnostic은 통합 문서가 소유하는 진단을 덧붙여 반환하며, 공급된 코드, 심각도, 작업, 메시지, 네이티브 코드, 시트 컨텍스트, 패키지 파트 이름을 기록하고, 예외가 공급되면 예외 클래스 이름을 복사한 뒤 OnDiagnostic을 호출합니다. 예외의 소유권을 가져가거나 던지지는 않습니다

function TXLSXWorkbook.AddDiagnostic(ACode: Integer;
  ASeverity: TXLSDiagnosticSeverity; AOperation: TXLSDiagnosticOperation;
  const AMessage: WideString; ANativeCode, ASheetIndex: Integer;
  const ASheetName, APartName: WideString;
  AException: Exception): TXLSDiagnostic;

출력 정책과 저장 패키지 검사

TXLSXWorkbook.CSVEmitFormulas는 기본값 False이며 수식 셀의 CSV 출력을 수식 결과에서 수식 텍스트로 바꿉니다. 결과 출력은 수식 평가를 시도하고 평가가 실패하면 저장된 셀 텍스트나 값으로 폴백합니다. TXLSXWorkbook.CSVQuoteAllStrings 역시 기본값 False이며 텍스트 필드에 따옴표를 강제하지만 숫자, 날짜, Boolean, Null, Empty는 평범한 따옴표 규칙을 유지합니다

TXLSXWorkbook.LastSaveUsedStreaming은 가장 최근 준비된 저장이 워크시트 스트리밍을 썼는지 보고합니다. TXLSXWorkbook.LastSavePeakRowXmlChars는 가장 큰 버퍼링 행 XML 조각을, TXLSXWorkbook.LastSaveBufferedWorksheetXmlChars는 합쳐진 버퍼링 워크시트 XML을, TXLSXWorkbook.LastSavePeakAuxiliaryXmlChars는 추적된 가장 큰 보조 XML 조각을 보고합니다. 이것들은 프로세스 메모리 측정이 아니라 직렬화기 계측의 문자 수이며, ODS 출력은 XLSX 워크시트 스트리밍 경로를 쓰지 않습니다

TXLSXWorkbook.TryCopyPreservedPart는 자격이 되는 보존 소스 파트를 압축 표현을 포함해 호출자가 공급한 대상 TZipArchive로 복사를 시도하며, 복사되면 True, 평범한 직렬화가 필요하면 False를 반환합니다. 소스는 파일 기반 열기로 계속 사용 가능해야 하고, 없거나 명시적으로 버려진 파트는 복사할 수 없습니다

호출자는 대상 아카이브를 소유하며 정상적으로 마쳐야 합니다. 압축 복사 롤백 실패가 여전히 예외를 던질 수 있고, 이 헬퍼는 완전한 통합 문서 패키지를 만들거나 관계·콘텐츠 타입을 갱신하지 않습니다

암호화와 통합 문서 메타데이터

TXLSXWorkbook.SaveAsEncryptedAgile은 파일 이름과 비어 있지 않은 암호를 받아 XLSX 패키지를 메모리에서 직렬화하고 Agile 암호화 컨테이너를 기록하며, 성공 시 1, 보고된 실패 시 -1을 반환합니다. 선택적인 VerifyEncryptedSave는 쓰기 뒤 다시 열기 검사를 수행하고, 이 메서드는 직렬화된 바이트뿐 아니라 암호화되지 않은 패키지를 위한 메모리도 필요로 합니다

TXLSXWorkbook.VerifyEncryptedFile은 공급된 파일과 암호를 임시 통합 문서로 열고 그 열기가 성공할 때만 True를 반환하며 예외는 False로 바꿉니다. 이것은 현재 통합 문서와 모든 셀을 비교하는 것이 아니라 읽기 가능성을 검사하며, 암호화되지 않은 XLSX 입력에 대해서는 평범한 OpenEncrypted 동작을 따릅니다

TXLSXWorkbook.DocSecurity는 확장 문서 속성 비트 필드를 저장합니다. 1은 암호 보호, 2는 읽기 전용 권고, 4는 강제된 읽기 전용 상태, 8은 주석 잠금입니다. 이 메타데이터 비트 자체가 암호화나 접근 제한을 적용하지는 않습니다

TXLSXWorkbook.DocPropsTouched는 문서 속성 writer가 추적된 속성이 구성되었는지 판단하는 데 쓰는 읽기 전용 플래그입니다. Title 같은 추적 속성 setter가 이것을 설정하지만, 직접 대입된 확장 메타데이터는 자동으로 설정하지 않습니다

TXLSXWorkbook.WorkbookProtectHash는 로드되거나 생성된 레거시 통합 문서 보호 해시를 노출하며, 보통 네 자리 16진수이거나 암호 해시가 없을 때 빈 문자열입니다. 이 읽기 전용 값을 대입해 보호를 바꾸지 말고 통합 문서 보호 메서드를 사용하며, 통합 문서 구조 보호와 암호화 파일 저장은 별개로 다루세요

TXLSXWorkbook.ThemeMajorFont과 TXLSXWorkbook.ThemeMinorFont는 테마에서 로드된 제목·본문 서체를 노출하고 기본 Office 테마가 생성될 때 그 이름을 재정의합니다. 그대로 보존된 테마가 이 폰트 이름 설정보다 우선합니다

테이블 스타일과 직렬화기 스타일 풀

TXLSXWorkbook.DefaultTableStyleName과 TXLSXWorkbook.DefaultPivotStyleName은 새로 삽입되는 Excel 테이블과 피벗 테이블을 위해 스타일 테이블에 저장된 기본 이름을 왕복합니다. 대입한다고 기존 모든 개체가 즉시 다시 서식 지정되지는 않습니다

TXLSXWorkbook.ResolveTableStyle은 이름으로 통합 문서 소유 커스텀 스타일을 반환하고, 그렇지 않으면 지원되는 내장 TableStyleLight1~TableStyleLight21, TableStyleMedium1~TableStyleMedium28, TableStyleDark1~TableStyleDark11을 해석해 캐시하며, 알 수 없는 이름은 nil을 반환합니다. 반환된 스타일을 해제하지 마세요

TXLSXWorkbook.FastStyleAppend은 기본값 False이며 대량 생성이 스타일 풀의 중복 제거 스캔과 평범한 복합 스타일 등록을 건너뛰게 합니다. 서로 다른 많은 스타일을 만들 때 더 큰 스타일 테이블을 감수하고 더 빠른 삽입을 얻는 방식입니다

function TXLSXWorkbook.RegisterCompositeXf(
  AFont, AFill, ABorder, ANumFmt, AAlign, AProt: Integer): Integer; overload;
function TXLSXWorkbook.RegisterCompositeXf(
  AFont, AFill, ABorder, ANumFmt, AAlign, AProt,
  ABuiltinNumFmt: Integer): Integer; overload;
function TXLSXWorkbook.RegisterLinkedCompositeXf(
  AFont, AFill, ABorder, ANumFmt, AAlign, AProt,
  AParentXfId: Integer; ALinkedParts: TXLSXFormatParts): Integer;

TXLSXWorkbook.RegisterCompositeXf는 결합된 폰트, 채우기, 테두리, 숫자 서식, 정렬, 보호 인덱스를 등록하고 절대 cellXfs 인덱스를 반환합니다. 복합 풀 슬롯이 아닙니다. 일곱 인수 오버로드는 공급된 커스텀 서식 인덱스보다 우선하는 내장 숫자 서식 ID를 받으며 0은 재정의 없음을 뜻합니다

TXLSXWorkbook.RegisterLinkedCompositeXf는 추가로 부모 스타일 XF ID와 그 부모에 링크된 서식 파트를 기록하며 다른 부모·링크 조합마다 별도 항목을 유지합니다. 역시 절대 cellXfs 인덱스를 반환합니다

TXLSXWorkbook.CompositeXfBase는 현재 1차원 스타일 풀에서 계산된 첫 절대 복합 인덱스를 반환하고, TXLSXWorkbook.CompositeXfCount는 등록된 복합 항목 수를 셉니다. GetCompositeXf가 쓰는 풀 슬롯은 절대 인덱스에서 기준을 뺀 값이며 풀이 늘어나면 기준도 바뀌므로, 이 값들은 현재 직렬화 상태에 속합니다

TXLSXWorkbook.RegisterCondDxf는 빌려 쓴 TXLSDxfStyle 참조를 등록해 0 기반 차이 스타일 ID를 반환하며 같은 개체 참조에는 기존 ID를 재사용합니다. 직렬화가 쓰는 동안 개체를 살려 두세요

TXLSXWorkbook.ResetCondDxfs는 빌려 쓴 스타일을 해제하지 않으면서 활성 레지스트리 개수를 지우고, TXLSXWorkbook.CondDxfCount는 그 개수를 보고합니다. 저장 준비가 이 레지스트리를 다시 만드므로 쓰고 있는 패키지와 별개로 이 ID들을 영속화하지 마세요

TXLSXWorkbook.PivotCaches는 워크시트 피벗 테이블이 공유하는 통합 문서 소유 TXLSPivotCaches 컬렉션입니다. AddPivotTable은 일치하는 소스 캐시를 재사용하거나 만들고, RefreshPivotCache는 지원되는 멤버 식별을 보존하면서 식별된 캐시를 새로 고칩니다

계산 통합

TXLSXWorkbook.RecalcThreads는 기본값 0이며 0 또는 1은 직렬 재계산을, 더 큰 값은 독립적인 수식 경계선의 워커 평가를 켭니다. 동적 배열을 가진 통합 문서는 이 설정과 무관하게 직렬 패스를 쓰고, what-if 데이터 테이블 노드는 직렬로 남으며, 워커가 쓰는 사용자 함수 핸들러는 스레드 안전해야 합니다

TXLSXWorkbook.SolveCycleIteratively는 반복 계산이 켜졌을 때 보통 Recalculate가 호출하는 고급 진입점으로, 그 통합 문서의 현재 종속성 그래프에서 노드 인덱스를 소비하며 공급된 TList의 순환 노드를 평가합니다. 워크스페이스 그래프나 다른 통합 문서의 인덱스는 호환되지 않습니다

솔버는 IterateCount와 IterateDelta를 사용하고 반복 한도에 도달해도 최종 값을 유지하며 수렴을 보증하지 않고 lxOk를 반환합니다. 동적 배열 순환 멤버는 lxErrorCircumRef를 반환하고, 시그니처의 CycleCount 인수가 그래프 노드의 순환 분류를 대체하지 않습니다

워크스페이스 종속성 그래프 구성

TXLSWorkspaceDepGraph는 통합 문서를 열거나 수식을 평가하지 않고 호출자가 공급한 통합 문서 식별과 시트 식별에 걸쳐 수식 종속성을 저장합니다. 현재 수식과 해석된 참조로 그래프를 구성한 뒤, 그 참조를 무효화하는 구조·수식 변경이 있으면 다시 구성하세요

function TXLSWorkspaceDepGraph.AddNode(
  const AWorkbookIdentity, ASheetName: WideString;
  ASheetIndex, ARow, ACol, AOutRow2, AOutCol2: Integer;
  AVolatile: Boolean; AReferences: TXLSWorkspaceDepReferenceList;
  ARefUnstable: Boolean = False): Integer;
procedure TXLSWorkspaceDepGraph.DirtyTopoOrder(AOrder: TList;
  out ACycleNodeCount, ABlockedNodeCount: Integer);

TXLSWorkspaceDepGraph.AddNode는 수식 노드를 덧붙여 0 기반 노드 인덱스를 반환하고, 목록을 소유하지 않고 공급된 참조를 복사합니다. 시트 인덱스는 1 기반이고, 포함 출력 사각형의 오른쪽 아래 모서리를 포함한 행·열 좌표는 0 기반 계산기 좌표입니다

TXLSWorkspaceDepReferenceList.Add는 해석된 셀·범위·정의된 이름 참조 레코드를 덧붙이고, TXLSWorkspaceDepReferenceList.Items는 0 기반 인덱스로 그 레코드를 읽으며, TXLSWorkspaceDepReferenceList.Clear는 재사용을 위해 목록을 초기화합니다. 호출자가 이 입력 목록을 소유하며 AddNode가 항목을 복사한 뒤에는 지우거나 해제할 수 있습니다

TXLSWorkspaceDepGraph.BuildEdges는 저장된 셀·범위 참조를 수식 출력 사각형에 대해 해석합니다. LookupScan으로 표시된 참조는 오염을 전파하지만 평가 순서를 강제하거나 순환 검출에 참여하지 않습니다

TXLSWorkspaceDepGraph.NodeIndexOf는 통합 문서, 시트, 행, 열을 0 기반 노드 인덱스나 없을 때 -1로 해석하며, 가능하면 시트 이름을 쓰고 선언된 시트 인덱스를 폴백으로 씁니다

TXLSWorkspaceDepGraph.FindDependentsOfDefinedName은 공급된 nil이 아닌 TList를 지우고 지정된 통합 문서·스코프에서 이름 붙은 심볼을 직접 참조하는 노드 인덱스들로 채웁니다. 음수 스코프 인덱스는 모든 스코프에 일치합니다. 항목은 Pointer(NativeInt(NodeIndex))로 인코딩되므로 nil 목록 항목이 노드 0을 나타낼 수 있습니다

워크스페이스 dirty 세대와 평가 순서

TXLSWorkspaceDepGraph.BeginDirtyGeneration은 새 세대를 시작하고 활성 dirty 노드 수와 순환 차단 플래그를 초기화하며 이전 dirty 스탬프를 비활성화합니다. 새 재계산 패스의 노드를 표시하기 전에 호출하세요

TXLSWorkspaceDepGraph.MarkAllDirty는 현재 세대의 모든 노드를 표시합니다. TXLSWorkspaceDepGraph.MarkWorkbookDirty는 식별된 통합 문서에 속한 노드와 그것을 참조하는 노드를 씨앗으로 삼아 종속 항목으로 전파하고, TXLSWorkspaceDepGraph.MarkVolatileDirty는 volatile 노드를, TXLSWorkspaceDepGraph.MarkCyclesDirty는 검출된 순환 구성요소를 씨앗으로 삼으며 그 오염도 전파합니다

TXLSWorkspaceDepGraph.IsNodeDirty는 유효한 노드가 현재 세대 스탬프를 가졌는지 보고하고 잘못된 인덱스에 대해 False를 반환합니다. TXLSWorkspaceDepGraph.DirtyGeneration은 그 스탬프를 노출하고, TXLSWorkspaceDepGraph.DirtyNodeCount는 활성 세대에서 표시된 노드 수를 셉니다

TXLSWorkspaceDepGraph.DirtyTopoOrder는 nil이 아닌 호출자 소유 TList를 요구하며 지우고 종속성 순서의 dirty 노드 인덱스로 채웁니다. dirty 순환 노드와 그 순환에 막힌 노드는 제외됩니다. 두 출력 개수가 순환 멤버와 막힌 다운스트림 노드를 구별하고, 목록 항목은 같은 포인터 인코딩 0 기반 인덱스 규약을 씁니다

TXLSWorkspaceDepGraph.HasRefUnstable은 참조 불안정 플래그로 추가된 노드가 있는지 보고하며, 평가 시점에 수식 참조가 바뀔 수 있을 때 호출자가 낡은 정적 스케줄에 의존하지 않게 합니다. 그래프가 그 바뀌는 참조를 스스로 해석하지는 않습니다

워크스페이스 그래프 검사

TXLSWorkspaceDepGraph.NodeCount는 수식 노드를, TXLSWorkspaceDepGraph.ReferenceCount는 복사된 참조를 세고, TXLSWorkspaceDepGraph.EdgeCount는 구성된 종속성 간선을 보고합니다. 간선 통계를 소비하기 전에 BuildEdges를 호출하세요

TXLSWorkspaceDepGraph.WorkbookCount는 인터닝된 통합 문서 식별(참조로 도입된 식별 포함)을 세고, TXLSWorkspaceDepGraph.WorkbookIdentities는 0 기반 인덱스로 나열합니다. 이 식별 문자열은 외부 파일이 로드되었다는 증거가 아니라 그래프 키입니다

TXLSWorkspaceDepGraph.ComponentCount는 구성요소 구성 뒤의 강결합 구성요소 수를 보고합니다. 구성은 MarkCyclesDirty, DirtyTopoOrder, 구성요소 접근이 유발합니다. 각 Components 레코드는 NodeStart, NodeCount, IsCycle을 공급합니다

TXLSWorkspaceDepGraph.ComponentNodes는 그 구성요소들의 평탄화된 0 기반 노드 인덱스 배열을 노출하며, 구성요소의 NodeStart부터 NodeStart + NodeCount - 1까지 인덱싱됩니다. 개수와 인덱스 레코드는 현재 그래프를 서술하므로 그래프를 재구성한 뒤에는 다시 얻어야 합니다

평범한 통합 문서 진입점은 추가 XLSX 퍼사드 멤버와 XLSX 퍼사드 개요에서 계속됩니다