Dokumentacja HotXLS / Dokumentacja API

Magazyn plików złożonych

lxCompoundFile czyta i zapisuje kontenery Compound File Binary przez strumienie Pascala, łącznie z zagnieżdżonymi zakresami magazynu, ładunkami MiniFAT i łańcuchowymi sektorami DIFAT; natywne API skoroszytu Classic BIFF8 korzystają z tego backendu na Linuksie i macOS

Do pracy z arkuszem używaj zwykłych wywołań Open i SaveAs skoroszytu; niższego poziomu API poniżej przydają się do inspekcji zagnieżdżonych strumieni, budowania kontenerów i zachowywania metadanych magazynu

Odczyt lub budowa kontenera

TlxCompoundFile.LoadFromStream(AStream, AOwnsStream) wczytuje metadane katalogu i alokacji; AOwnsStream domyślnie ma wartość False, a strumień podkładowy musi pozostać dostępny podczas wyciągania swojej zawartości

CreateNew(AStream, AOwnsStream) przygotowuje nowy kontener, AddStorage i AddStream kolejkują jego zawartość, a Save zapisuje kontener w wersji 3 z wymaganymi sektorami rozszerzenia DIFAT

SkładnikZachowanie
RootIndexTożsamość wpisu katalogu głównego, używana jako rodzic dla magazynów i strumieni najwyższego poziomu
AddStorage(Name, ParentIndex)Kolejkuje zagnieżdżony magazyn i zwraca jego tożsamość katalogową do dodawania potomków
AddStream(Name, Data)Kolejkuje strumień bajtów na poziomie korzenia
AddStream(Name, Data, ParentIndex)Kolejkuje strumień bajtów w wybranym zakresie rodzica i zwraca jego tożsamość
OpenStream(Name), OpenStream(Name, ParentIndex)Wyciągają strumień korzeniowy lub o określonym zakresie do posiadanego TlxCfbStream; brakujący strumień zwraca nil
OpenEntryStream(Index)Wyciąga strumień katalogowy po tożsamości; nieprawidłowy wpis albo wpis inny niż strumień zwraca nil
HasStream(Name), HasStream(Name, ParentIndex)Sprawdzają obecność strumienia w korzeniu albo w wybranym zakresie rodzica
FindStorage(Name, ParentIndex)Zwraca tożsamość magazynu u wybranego rodzica albo -1, gdy brak pasującego magazynu
EntryCount, Entries(Index)Podglądają wczytane wpisy katalogu; indeksy są numerowane od zera i muszą być poprawne
SetEntryMetadata(Index, Entry)Kopiuje wyłącznie identyfikator klasy, bity stanu i znaczniki czasu do poprawnego skolejkowanego wpisu albo korzenia; tożsamości strukturalne i ładunki pozostają bez zmian

Rekord TlxCfbEntry udostępnia Name, EntryType, StartSector, Size, LeftSibling, RightSibling, Child i wyliczone ParentIndex; łącza katalogowe to indeksy, a -1 oznacza brakującą tożsamość

Jego pola metadanych to ClassID, StateBits, CreationTime i ModificationTime; znaczniki czasu zachowują surowe tyknięcia FILETIME od epoki 1601 UTC zamiast daty formatowanej wg ustawień regionalnych

TlxCfbEntryType zawiera cfbEmpty, cfbStorage, cfbStream i cfbRoot; TlxCfbStream udostępnia Name, Size, Data, Read, Seek i CopyTo

Wyciągnięte strumienie posiadają odłączone bajty i muszą być zwalniane przez wywołującego; uszkodzenia, niekompletne łańcuchy, nieprawidłowa własność i cykliczne grafy katalogowe albo alokacyjne są odrzucane zamiast zwracać obcięte ładunki

lxCfbCompareNames(A, B) stosuje porządek Compound File Binary „najpierw długość” z przypiętym prostym mapowaniem na wielkie litery BMP; zduplikowane nazwy są ograniczone do rodzica, a identyczne nazwy w osobnych zagnieżdżonych magazynach pozostają odrębne

Natywne interfejsy magazynu

Na celach poza Windows lxOLE dostarcza implementację interfejsu magazynu wymaganą przez wczytywanie i zapis skoroszytów Classic; jej IStorage, IStream i IEnumStatStg zachowują jawną własność interfejsów i odłączony stan natywnego kontenera

Fabryka lub pomocnikKontrakt
XlsOpenCompoundStorage(Source, Storage)Wczytuje kontener tylko do odczytu od offsetu zerowego strumienia
XlsOpenCompoundStorage(Source, Start, Storage)Wczytuje kontener od jawnego nieujemnego offsetu
XlsCreateCompoundStorage(Storage)Tworzy zapisywalny natywny magazyn z zagnieżdżonymi zakresami i strumieniami
XlsWriteCompoundStorage(Storage, Destination)Serializuje natywny magazyn korzeniowy do podanego strumienia; obce implementacje i magazyny inne niż korzeń są odrzucane
XlsFreeCompoundStorageName(Name)Zwalnia natywne nazwy zwrócone przez statystyki lub enumerację magazynu; nil jest akceptowane

Fabryki zwracają HResult; przetestuj Succeeded(Result) przed użyciem zwróconego interfejsu i zwalniaj odwołania interfejsów po skończeniu

Mutacja w trybie tylko do odczytu kończy się błędem, sklonowane kursory strumieni zachowują niezależne pozycje, a zagnieżdżone kopie zachowują tożsamość rodzica i obsługiwane metadane; bezpośrednia serializacja nie zapewnia kontraktu transakcji celu wyższego poziomu skoroszytu

Kanoniczne identyfikatory skoroszytu

XlsIdentifierKeyText(const A: WideString): WideString w lxStandard zwraca reprezentację tekstową UTF-16 istniejącego przypiętego klucza identyfikatora Unicode, pozwalając zapisowi nazw zdefiniowanych Classic dzielić kanoniczną równość z innymi silnikami skoroszytu

Ta reprezentacja klucza służy tożsamości i wyszukiwaniu, a nie wyświetlanej pisowni; napisane nazwy pozostają bez zmian, a komparator katalogu CFB zachowuje swoje odrębne, narzucone przez format porządkowanie

Zobacz wsparcie Free Pascal dla wymagań budowania natywnego i zweryfikowanego kontraktu skoroszytu BIFF8 oraz szyfrowanie Classic dla obsługiwanego szyfrowania i zachowania strumienia właściwości w postaci jawnego tekstu