HotXLS-dokumentasjon

Strømming av store regneark

Oversikt

Innlasting av svært store regneark (f.eks. millioner av utfylte celler) i minnet kan føre til feil om ikke nok minne i 32-bits prosesser; HotXLS tilbyr strømmende lesere og skrivere med nesten konstant minnebruk, som går utenom DOM-generering under tolkning av arbeidsboken

Direct Reader-API

Klassen TXLSDirectReader tolker arbeidsbokstrømmer uten å bygge cellemodeller i minnet, og utløser OnSheet og OnCell-hendelser etter hvert som utvalgte celler treffes

Reader := TXLSDirectReader.Create;
try
  Reader.ParallelSheets := True;
  Reader.ParallelMaxThreads := 4;
  Reader.ParallelBufferMemoryLimit := 16 * 1024 * 1024;
  Reader.OnDimension := HandleDimension;
  Reader.OnColumn := HandleColumn;
  Reader.OnRow := HandleRow;
  Reader.OnMerge := HandleMerge;
  Reader.OnCell := HandleCell;
  Reader.ReadFile('large.xlsx');
finally
  Reader.Free;
end;

ParallelSheets aktiverer worker-lokale regnearkinflatere og XML-lesere, mens kalltråden sender hendelser i regneark- og cellerekkefølge

ParallelBufferMemoryLimit begrenser den samlede kølagrede råcelle-payloaden på tvers av aktive workers og er som standard 16 MiB, mens ParallelPeakBufferedBytes rapporterer den forrige parallelle lesingens toppverdi for diagnostikk og kapasitetstester

Dette lar deg skanne regnearkrader sekvensielt og avbryte tidlig når måldatagrensene er løst

OnDimension, OnSheetFormat, OnColumn, OnRow, OnPane og OnMerge eksponerer brukt område, standardbredder og -høyder, kolonnespenn, radhøyde eller synlighet, disposjons- og stilindekser, rutilstand og sammenslåtte områder uten å bygge regnearkobjekter

Layout-Callback er opt-in og kjører i et metadatapass med begrenset minne før OnCell-hendelsene for det valgte regnearket; sammenslåtte områder kommer derfor før cellene inne i sammenslåingen, selv om OOXML lagrer mergeCells etter sheetData

Når parallel arkparsing er aktivert, forblir layout-Callback på kalltråden og fullføres for de valgte regnearkene før worker-køene tømmes

Å sette Abort i OnCell vekker blokkerte produsenter og forbrukere, stopper pågående ZIP-lesinger og dekompresjon ved avgrensede interne trinn, venter inn alle workers og lar readeren være gjenbrukbar

Direct Writer-API

Klassen TXLSDirectWriter skriver rader direkte til ZIP-filpakken og sikrer minimal minneoverhead ved generering av store dataeksporter

Writer := TXLSDirectWriter.Create;
try
  Writer.BeginFile('large.xlsx');
  Writer.AddSheet('Data');
  Writer.AddRow(1);
  Writer.WriteString(1, 'Quarter');
  Writer.WriteString(2, 'Revenue');
  Writer.AddComment(2, 1, 'Validated source', 'Reviewer');
  Writer.AddImageFromFile(4, 1, 8, 12, 'logo.png',
    xlsDirectImagePng, 'Company logo');
  ChartIndex := Writer.AddChart(9, 1, 18, 16,
    xlsDirectChartColumn, 'Revenue');
  Writer.AddChartSeries(ChartIndex, 'Revenue',
    'Data!$A$2:$A$5', 'Data!$B$2:$B$5');
  Writer.Close;
finally
  Writer.Free;
end;

AddComment skriver klassiske cellenotater med forfattermetadata og tilhørende VML-notatformer uten å laste en regnearkobjektmodell

AddImage, AddImageFromFile og AddImageFromStream godtar tocelleankre og PNG-, JPEG-, GIF-, BMP-, EMF- eller WMF-payloads; filkilder flyter rett inn i ZIP-oppføringen når arket fullføres, mens strømkilder bare beholder strømreferansen og det registrerte byteområdet

Når AddImageFromStream får OwnsStream=True, frigjør writeren strømmen etter at regnearkets sidedeler er ferdigstilt; ellers må kalleren holde den søkbare strømmen i live til neste AddSheet- eller Close-kall

AddChart og AddChartSeries genererer kolonne-, stolpe-, linje-, område-, sektor-, ring- og punktdiagrammer som ChartML med formelbaserte serier, mens AddChartXml legger ved en komplett diagramdel levert av kalleren for avanserte diagramfamilier og utvidelser

Kommentarer, tegnankre og diagrambeskrivelser beholdes bare for det gjeldende regnearket; etter at sheetData lukkes, skriver writeren regnearkrelasjoner, kommentarer, VML, DrawingML, medier og ChartML sekvensielt, og frigjør deretter sidekanal-tilstanden før neste regneark begynner