HotXLS poate deschide un registru de lucru XLSX și să nu analizeze nicio celulă de foaie de calcul. TXLSXWorkbook.MetadataOnly citește proprietățile registrului de lucru, numele definite, numele foilor și stările de vizibilitate, stilurile, tema, conexiunile și legăturile externe, apoi se oprește înainte de XML-ul celulelor. Pentru un scanner care trebuie să știe ce e într-un director de registre de lucru, aceasta este diferența dintre minute și secunde
Trei comutatoare înrudite completează tabloul: SelectedSheets analizează celulele pentru un subansamblu denumit, LoadSheet materializează ulterior o foaie omisă din arhiva originală, iar PreserveRawParts copiază direct la salvare octeții comprimați ale părților nemodificate. Folosite împreună transformă „deschide un registru de lucru” dintr-o operațiune totul-sau-nimic într-un ceva ce puteți delimita
Ce puteți afla fără a analiza o singură celulă?
Mai mult decât au nevoie majoritatea sarcinilor de descoperire. Cu MetadataOnly setat înainte de Open, registrul de lucru se întoarce purtând numele foilor și stările lor de vizibilitate, numele sale definite, proprietățile documentului, stilurile și tema, legăturile externe și conexiunile sale. Foaiele sunt prezente ca obiecte cu zero celule
Aceasta este exact informația pe care o rulează un catalog, un audit sau o decizie de rutare. Care registre de lucru definesc un nume numit TaxRate? Care au foi ascunse? Care se leagă la un server retras din uz? Răspunsul la acestea prin încărcarea completă a fiecărui fișier este modul în care o sarcină nocturnă devine o sarcină toată noaptea
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;
Încărcarea a două foi din patruzeci
SelectedSheets este un TStringList de nume de foi. Când este nevid, Open analizează XML-ul celulelor doar pentru foile pe care le numește; fiecare altă foaie își păstrează numele și starea de vizibilitate corecte și nu deține nicio celulă. O listă vidă înseamnă comportamentul anterior, anume încărcarea tuturor
Interacțiunea cu MetadataOnly merită spusă clar, deoarece inversarea ei produce un registru de lucru gol derutant: MetadataOnly = True suprascrie selecția și sare toate foile. Folosiți una sau alta. Descoperirea folosește doar-metadate; munca țintită folosește o selecție
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) materializează la cerere o foaie omisă din arhiva originală, ceea ce face acest tipar utilizabil într-o aplicație interactivă mai degrabă decât doar într-un lot. Deschideți cu foaia pe care o privește utilizatorul, le încărcați pe celelalte când dă clic. Arhiva rămâne deschisă exact din acest motiv, așa că păstrați registrul de lucru viu atâta timp cât utilizatorul ar putea cere o altă foaie
De ce schimbă un drum dus-întors părți pe care nu le-ați atins niciodată?
Pentru că o salvare naivă regenerează totul. Decomprimați tema, construiți un model de obiecte, serializați-o înapoi, recomprimați — iar acum octeții diferă chiar dacă nimic despre temă nu s-a schimbat. Pentru proiectele VBA și cache-urile pivot asta este mai rău decât risipitor, deoarece acele părți poartă structură pe care modelul de obiecte nu o reprezintă complet
PreserveRawParts răspunde la asta copiind reprezentarea comprimată a părților nemodificate direct din arhiva sursă în timpul SaveAs. Tema, proiectul VBA, tabelele pivot și cache-urile pivot se mută ca octeți când nu au fost modificate. Fără decomprimare, fără recomprimare, fără riscul de a pierde ceva într-un drum dus-întors de serializare
Costul este o constrângere pe care o aveați deja: arhiva sursă trebuie să fie încă disponibilă la salvare. Dacă fluxul de lucru citește un fișier în memorie, îl închide și salvează o oră mai târziu, calea de copiere brută nu are ce copia. Păstrați sursa accesibilă pe durata de viață a registrului de lucru, aceeași cerință pe care o impune LoadSheet
Un flux de descoperire care redeschide intenționat
Tiparul care funcționează în producție are două treceri și nicio viclenie. Trecerea unu deschide doar-metadate și decide. Trecerea doi redeschide fișierele care contează cu o selecție de foi și face munca. Redeschiderea pare risipitoare până numărați ce a evitat trecerea unu: a doua deschidere este singura care analizează celule, iar analizează doar foile selectate de trecerea unu
// 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);
Nu încercați să promovați un registru de lucru doar-metadate în loc prin ștergerea fanionului după Open. Fanionul este citit în timpul deschiderii; ștergerea lui ulterior nu schimbă nimic despre un registru de lucru al cărui XML de celule nu a fost niciodată vizitat
Unde se încadrează asta cu celelalte pârghii pentru fișiere mari
Încărcarea selectivă reduce ce analizați. Nu reduce ce costă o foaie odată încărcată, iar nu ajută când aveți nevoie cu adevărat de fiecare celulă a fiecărei foi. Pentru acel caz munca relevantă este pe partea de stocare, descrisă în notele despre stocarea celulelor în blocuri de rânduri și suprapunerile de stil interval, iar pe partea de analiză în analiza XLSX paralelă și alocatorul de memorie. Când sarcina este o scanare pură fără nicio editare, cititorul direct în flux sare modelul de obiecte în întregime și va bate orice strategie de încărcare care construiește unul
HotXLS deschide fișiere XLS și XLSX din cod Delphi și C++Builder nativ fără dependență de Excel, astfel încât o sarcină de descoperire pe server rulează fără nimic instalat dincolo de propriul executabil — vedeți pagina componentei de foi de calcul HotXLS pentru formatele suportate și licențiere