HotXLS može otvoriti XLSX radnu svesku i uopšte ne parsirati ćelije radnog lista. TXLSXWorkbook.MetadataOnly čita svojstva radne sveske, definisana imena, imena radnih listova i stanja vidljivosti, stilove, temu, veze i spoljne veze, a zatim staje pre XML-a ćelija. Za skener koji treba da zna šta je u direktorijumu radnih sveski, to je razlika između minuta i sekundi
Tri srodna prekidača upotpunjuju sliku: SelectedSheets parsira ćelije za imenovani podskup, LoadSheet materijalizuje preskočeni list kasnije iz originalne arhive, a PreserveRawParts kopira komprimovane bajtove neizmenjenih delova direktno pri snimanju. Korišćeni zajedno pretvaraju «otvori radnu svesku» iz jedne sve-ili-ništa operacije u nešto što možete opsegovati
Šta možete naučiti bez parsiranja jedne ćelije?
Više nego što većini zadataka otkrivanja treba. Sa MetadataOnly postavljenim pre Open, radna sveska se vraća noseći svoja imena listova i stanja vidljivosti, svoja definisana imena, svoja svojstva dokumenta, svoje stilove i temu, svoje spoljne veze i svoje veze. Listovi su prisutni kao objekti sa nula ćelija
To je tačno ona informacija na kojoj radi katalog, revizija ili odluka usmeravanja. Koje radne sveske definišu ime koje se zove TaxRate? Koje imaju skrivene listove? Koje se povezuju na server koji je povučen iz upotrebe? Odgovaranje na to potpunim učitavanjem svakog fajla jeste kako noćni posao postaje celonoćni posao
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 jeste TStringList imena listova. Kad je neprazna, Open parsira XML ćelija samo za listove koje imenuje; svaki drugi list zadržava svoje ispravno ime i stanje vidljivosti i ne drži ćelije. Prazna lista znači prethodno ponašanje, koje jeste učitavanje svega
Interakcija sa MetadataOnly vredi izreći jasno, jer obrtanje proizvodi zbunjujuću praznu radnu svesku: MetadataOnly = True nadjačava izbor i preskače sve listove. Koristite jedno ili drugo. Otkrivanje koristi samo-metapodatke; ciljani rad koristi izbor
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) materijalizuje preskočeni list na zahtev iz originalne arhive, što je ono što čini ovaj obrazac upotrebljivim u interaktivnoj aplikaciji a ne samo u paketu. Otvorite sa listom koju korisnik gleda, učitate ostale kad kliknu. Arhiva ostaje otvorena upravo iz tog razloga, tako da držite radnu svesku živom onoliko dugo koliko korisnik može tražiti još jedan list
Zašto povratni put menja delove koje nikad niste dirali?
Zato što naivno snimanje regeneriše sve. Dekomprimujte temu, izgradite model objekata, serijalizujte je nazad, ponovo kompresujte — i sada se bajtovi razlikuju iako se ništa oko teme nije promenilo. Za VBA projekte i pivot keševe to je gore od rasipništva, jer ti delovi nose strukturu koju model objekata ne predstavlja u potpunosti
PreserveRawParts odgovara na to kopiranjem komprimovane reprezentacije neizmenjenih delova direktno iz izvorne arhive tokom SaveAs. Tema, VBA projekat, pivot tabele i pivot keševi prelaze kao bajtovi kad nisu izmenjeni. Bez dekompresije, bez ponovne kompresije, bez rizika od gubitka nečega u serijalizacijskom povratnom putu
Cena je ograničenje koje ste već imali: izvorna arhiva mora i dalje biti dostupna u trenutku snimanja. Ako vaš tok čita fajl u memoriju, zatvara ga i snima sat kasnije, putanja sirovog kopiranja nema šta da kopira. Držite izvor dostupnim za veka trajanja radne sveske, što je isti zahtev koji LoadSheet nameće
Linija obrade otkrivanja koja namerno ponovo otvara
Obrazac koji radi u proizvodnji ima dva prolaza i bez lukavosti. Prolaz jedan otvara samo-metapodatke i odlučuje. Prolaz dva ponovo otvara fajlove koji se računaju sa izborom listova i radi posao. Ponovno otvaranje deluje rasipnički dok ne prebrojite šta je prolaz jedan izbegao: drugo otvaranje je jedino koje parsira ćelije, i parsira samo listove koje je prolaz jedan izabrao
// 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);
Ne pokušavajte da unapredite radnu svesku samo-metapodataka na mestu tako što ćete očistiti zastavicu posle Open. Zastavica se čita tokom otvaranja; čišćenje naknadno ne menja ništa kod radne sveske čiji XML ćelija nikada nije bio posjećen
Gde se ovo uklapa sa ostalim polugama za velike fajlove
Selektivno učitavanje smanjuje ono što parsirate. Ne smanjuje ono što list košta jednom učitan, i ne pomaže kad iskreno treba svaka ćelija svakog lista. Za taj slučaj relevantan rad je na strani skladišta, opisan u beleškama o skladištu ćelija po blokovima redova i intervalnim prelazima stilova, i na strani parsiranja u paralelnom XLSX parsiranju i alokatoru memorije. Kad je zadatak čisto skeniranje bez ikakvog uređivanja, strujni direktni čitač preskače model objekata u potpunosti i pobediće svaku strategiju učitavanja koja gradi jedan
HotXLS otvara XLS i XLSX fajlove iz nativnog Delphi i C++Builder koda bez zavisnosti od Excel-a, tako da posao otkrivanja na strani servera radi bez ičeg instaliranog osim vašeg sopstvenog izvršnog fajla — pogledajte stranicu HotXLS komponente za proračunske tabele za podržane formate i licenciranje