HotXLS može otvoriti XLSX radnu knjigu i uopće ne raščlaniti ćelije radnog lista. TXLSXWorkbook.MetadataOnly čita svojstva radne knjige, definirana imena, imena listova i stanja vidljivosti, stilove, temu, veze i vanjske poveznice, a zatim staje prije XML-a ćelija. Za alat za pretragu koji treba znati što je u direktoriju radnih knjiga, to je razlika između minuta i sekundi
Tri povezana prekidača upotpunjuju sliku: SelectedSheets raščlanjuje ćelije za imenovani podskup, LoadSheet materijalizira preskočeni list kasnije iz izvorne arhive, a PreserveRawParts kopira komprimirane bajtove nepromijenjenih dijelova izravno pri spremanju. Zajedno upotrijebljeni pretvaraju otvaranje radne knjige iz jedne sve-ili-ništa operacije u nešto što možete opsegom ograničiti
Što možete saznati bez raščlambe ijedne ćelije?
Više nego što većini zadataka otkrivanja treba. S MetadataOnly postavljenim prije Open, radna knjiga vraća se noseći imena listova i stanja vidljivosti, definirana imena, svojstva dokumenta, stilove i temu, vanjske poveznice i veze. Listovi su prisutni kao objekti s nula ćelija
To je upravo onaj podatak na kojem radi katalog, revizija ili odluka usmjeravanja. Koje radne knjige definiraju ime koje se zove TaxRate? Koje imaju skrivene listove? Koje se povezuju s poslužiteljem koji je povučen? Odgovaranje na to potpunim učitavanjem svake datoteke način je na koji noćni posao postaje posao cijele noći
var
Workbook: TXLSXWorkbook;
I: Integer;
begin
Workbook := TXLSXWorkbook.Create(nil);
try
Workbook.MetadataOnly := True; // set before Open
Workbook.Open(FileName);
for I := 1 to Workbook.Sheets.Count do // Sheets[] is 1-based
if not Workbook.Sheets[I].Visible then
Report.Add(FileName + ': hidden sheet ' +
Workbook.Sheets[I].Name);
finally
Workbook.Free;
end;
end;
Učitavanje dva lista od četrdeset
SelectedSheets jest TStringList imena listova. Kad je neprazan, Open raščlanjuje XML ćelija samo za listove koje imenuje; svaki drugi list zadržava ispravno ime i stanje vidljivosti i ne drži ćelije. Prazan popis znači prethodno ponašanje, a to jest učitavanje svega
Međudjelovanje s MetadataOnly vrijedi izreći jasno, jer obrtanje stvara zbunjujuću praznu radnu knjigu: MetadataOnly = True nadjačava odabir i preskače sve listove. Koristite jedno ili drugo. Otkrivanje koristi samo metapodatke; ciljani rad koristi odabir
Workbook.SelectedSheets.Add('Summary');
Workbook.SelectedSheets.Add('Q3 Detail');
Workbook.Open('consolidated-2026.xlsx');
// Later, when the user opens a tab you skipped.
// LoadSheet takes the 0-based position and needs the source file,
// so it does not work on a workbook opened from a stream
if Workbook.LoadSheet(ZeroBasedPosition) then
Grid.Refresh;
LoadSheet(Index) materijalizira preskočeni list na zahtjev iz izvorne arhive, što je što ovaj obrazac čini upotrebljivim u interaktivnoj aplikaciji, a ne samo u seriji. Otvorite s listom na kojem korisnik gleda, učitate ostale kad on klikne. Arhiva ostaje otvorena upravo iz tog razloga, pa držite radnu knjigu na životu onoliko dugo koliko korisnik može zatražiti drugi list
Zašto povratni put promijeni dijelove koje nikad niste dotakli?
Zato što naivno spremanje sve iznova generira. Dekomprimirajte temu, izgradite objektni model, serijalizirajte ga natrag, ponovno komprimirajte, i sada se bajtovi razlikuju iako se ništa oko teme nije promijenilo. Za VBA projekte i predmemoriju zaokreta to je gore od rasipanja, jer ti dijelovi nose strukturu koju objektni model ne prikazuje u potpunosti
PreserveRawParts odgovara na to kopiranjem komprimirane reprezentacije nepromijenjenih dijelova izravno iz izvorne arhive tijekom SaveAs. Tema, VBA projekt, pivot tablice i predmemorija zaokreta premještaju se kao bajtovi kad nisu bili izmijenjeni. Bez dekompresije, bez ponovne kompresije, bez rizika od gubitka nečega u serijalizacijskom povratnom putu
Cijena je ograničenje koje ste već imali: izvorna arhiva mora biti dostupna u vrijeme spremanja. Ako vaš cjevovod čita datoteku u memoriju, zatvara je i sprema sat kasnije, put sirovog kopiranja nema od čega kopirati. Držite izvor dostupnim za cijelog vijeka trajanja radne knjige, što je isti zahtjev koji LoadSheet nameće
Cjevovod otkrivanja koji namjerno ponovno otvara
Obrazac koji radi u proizvodnji ima dva prolaza i nimalo domišljatosti. Prolaz jedan otvara samo s metapodacima i odlučuje. Prolaz dva ponovno otvara datoteke koje su važne s odabirom listova i obavlja posao. Ponovno otvaranje čini se rasipnim dok ne prebrojite što je prolaz jedan izbjegao: drugo otvaranje jedino je koje raščlanjuje ćelije, i to samo listove koje je prolaz jedan odabrao
// Pass 1: discovery
Workbook.MetadataOnly := True;
Workbook.Open(FileName);
Wanted := SheetsMatching(Workbook, 'Invoice');
Workbook.Free;
// Pass 2: targeted load
Workbook := TXLSXWorkbook.Create(nil);
Workbook.SelectedSheets.AddStrings(Wanted);
Workbook.Open(FileName);
Nemojte pokušavati promicati radnu knjigu s metapodacima na mjestu brisanjem oznake nakon Open. Oznaka se čita tijekom otvaranja; njeno brisanje nakon toga ne mijenja ništa kod radne knjige čiji XML ćelija nikad nije bio posjećen
Gdje se ovo uklapa s ostalim polugama za velike datoteke
Selektivno učitavanje smanjuje ono što raščlanjujete. Ne smanjuje ono što list košta jednom učitan, a ne pomaže kad vam doista treba svaka ćelija svakog lista. Za taj slučaj relevantan rad jest na strani pohrane, opisan u bilješkama o pohrani ćelija u blokovima redova i preklopnim slojevima intervala stilova, a na strani raščlambe u paralelnoj XLSX raščlambi i alokatoru memorije. Kad je zadatak čisto skeniranje bez ikakvog uređivanja, izravni čitač strujanja u potpunosti preskače objektni model i pobijedit će svaku strategiju učitavanja koja ga gradi
HotXLS otvara XLS i XLSX datoteke iz izvornog Delphi i C++Builder koda bez ovisnosti o Excelu, pa posao otkrivanja na strani poslužitelja radi bez ičega instaliranog osim vlastite izvršne datoteke. Pogledajte stranicu HotXLS komponente proračunskih tablica za podržane formate i licenciranje