HotXLS 문서 / API 참조

컴파운드 파일 스토리지

lxCompoundFile은 Pascal 스트림으로 Compound File Binary 컨테이너를 읽고 쓰며, 중첩 스토리지 스코프, MiniFAT 페이로드, 체인된 DIFAT 섹터를 다룹니다. 네이티브 Classic BIFF8 통합 문서 API는 Linux와 macOS에서 이 백엔드를 사용합니다

스프레드시트 작업에는 평범한 통합 문서 Open, SaveAs 호출을 쓰세요. 아래의 하위 레벨 API는 중첩 스트림 검사, 컨테이너 만들기, 스토리지 메타데이터 보존에 유용합니다

컨테이너 읽기 또는 만들기

TlxCompoundFile.LoadFromStream(AStream, AOwnsStream)은 디렉터리와 할당 메타데이터를 로드합니다. AOwnsStream은 기본값 False이며, 내용을 추출하는 동안 뒷받침 스트림이 계속 사용 가능해야 합니다

CreateNew(AStream, AOwnsStream)는 새 컨테이너를 준비하고, AddStorage와 AddStream은 내용을 큐에 넣으며, Save는 필요한 DIFAT 확장 섹터를 포함해 버전 3 컨테이너를 기록합니다

멤버동작
RootIndex루트 디렉터리 항목의 식별자이며, 최상위 스토리지와 스트림의 부모로 쓰입니다
AddStorage(Name, ParentIndex)중첩 스토리지를 큐에 넣고 자식을 추가할 때 쓰는 디렉터리 식별자를 반환합니다
AddStream(Name, Data)루트 레벨 바이트 스트림을 큐에 넣습니다
AddStream(Name, Data, ParentIndex)선택한 부모 스코프에 바이트 스트림을 큐에 넣고 식별자를 반환합니다
OpenStream(Name), OpenStream(Name, ParentIndex)루트 또는 스코프 스트림을 소유하는 TlxCfbStream으로 추출합니다. 스트림이 없으면 nil을 반환합니다
OpenEntryStream(Index)식별자로 디렉터리 스트림을 추출합니다. 잘못되었거나 스트림이 아닌 항목은 nil을 반환합니다
HasStream(Name), HasStream(Name, ParentIndex)루트 또는 선택한 부모 스코프에 스트림이 있는지 검사합니다
FindStorage(Name, ParentIndex)선택한 부모에서 스토리지 식별자를 반환하고, 일치하는 스토리지가 없으면 -1을 반환합니다
EntryCount, Entries(Index)로드된 디렉터리 항목을 검사합니다. 인덱스는 0 기반이며 유효해야 합니다
SetEntryMetadata(Index, Entry)클래스 ID, 상태 비트, 타임스탬프만 유효한 큐 항목이나 루트에 복사합니다. 구조적 식별자와 페이로드는 바뀌지 않습니다

TlxCfbEntry 레코드는 Name, EntryType, StartSector, Size, LeftSibling, RightSibling, Child와 파생된 ParentIndex를 노출합니다. 디렉터리 링크는 인덱스이며 -1은 식별자가 없음을 뜻합니다

메타데이터 필드는 ClassID, StateBits, CreationTime, ModificationTime입니다. 타임스탬프는 로캘 서식 날짜가 아니라 1601 UTC epoch 기준의 원본 FILETIME 틱을 유지합니다

TlxCfbEntryType에는 cfbEmpty, cfbStorage, cfbStream, cfbRoot가 있고, TlxCfbStream은 Name, Size, Data, Read, Seek, CopyTo를 노출합니다

추출된 스트림은 분리된 바이트를 소유하므로 호출자가 해제해야 합니다. 손상, 불완전한 체인, 잘못된 소유권, 순환하는 디렉터리·할당 그래프는 잘린 페이로드를 반환하는 대신 거부합니다

lxCfbCompareNames(A, B)는 고정된 단순 BMP 대문자 매핑과 함께 Compound File Binary의 길이 우선 순서를 적용합니다. 이름 중복은 부모 스코프 안에서만 이루어지며, 서로 다른 중첩 스토리지의 동일한 이름은 서로 구별됩니다

네이티브 스토리지 인터페이스

non-Windows 대상에서 lxOLE은 Classic 통합 문서 로딩·저장에 필요한 스토리지 인터페이스 구현을 제공합니다. 그 IStorage, IStream, IEnumStatStg은 명시적인 인터페이스 소유권과 분리된 네이티브 컨테이너 상태를 유지합니다

팩터리 또는 헬퍼계약
XlsOpenCompoundStorage(Source, Storage)스트림 오프셋 0부터 시작하는 읽기 전용 컨테이너를 로드합니다
XlsOpenCompoundStorage(Source, Start, Storage)명시적인 음수 아닌 오프셋부터 컨테이너를 로드합니다
XlsCreateCompoundStorage(Storage)중첩 스코프와 스트림을 갖춘 쓰기 가능 네이티브 스토리지를 만듭니다
XlsWriteCompoundStorage(Storage, Destination)네이티브 루트 스토리지를 주어진 스트림에 직렬화합니다. 외부 구현과 non-루트 스토리지는 거부됩니다
XlsFreeCompoundStorageName(Name)스토리지 통계나 열거가 반환한 네이티브 이름을 해제합니다. nil도 받습니다

팩터리는 HResult를 반환합니다. 반환된 인터페이스를 쓰기 전에 Succeeded(Result)를 검사하고, 다 쓴 인터페이스 참조는 해제하세요

읽기 전용 변경은 실패하고, 복제된 스트림 커서는 독립적인 위치를 유지하며, 중첩 복사는 부모 식별자와 지원되는 메타데이터를 보존합니다. 직접 직렬화는 상위 레벨 통합 문서 대상 트랜잭션 계약을 제공하지 않습니다

표준 통합 문서 식별자

lxStandard의 XlsIdentifierKeyText(const A: WideString): WideString은 기존 고정 Unicode 식별자 키의 UTF-16 텍스트 표현을 반환해, Classic 정의된 이름 스토리지가 다른 통합 문서 엔진과 표준 동등성을 공유하게 합니다

이 키 표현은 표시 철자가 아니라 식별과 조회용입니다. 작성된 이름은 바뀌지 않으며, CFB 디렉터리 비교기는 형식이 요구하는 별도의 순서를 유지합니다

네이티브 빌드 요구 사항과 검증된 BIFF8 통합 문서 계약은 Free Pascal 지원을, 지원되는 암호화와 평문 프로퍼티 스트림 동작은 Classic 암호화를 참조하세요