HotXLS dokumentacija

Didelių skaičiuoklių srautinis perdavimas

Apžvalga

Labai didelių skaičiuoklių (pvz. milijonų užpildytų langelių) įkėlimas į atmintį gali sukelti atminties trūkumo klaidas 32 bitų procesuose; HotXLS pateikia srautinius skaitytuvus ir rašytuvus su beveik pastovia atminties sąnauda, apeidamas DOM generavimą darbo knygos analizės metu

Tiesioginis skaitytuvo API

Klasė TXLSDirectReader nuosekliai analizuoja darbo knygos srautus nekurdama atminties langelių modelių; ji suaktyvina įvykius sutikus langelius

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;

Tai leidžia jums nuosekliai peržvelgti lapo eilutes ir anksti nutraukti, kai tikslinių duomenų ribos yra išspręstos

ParallelBufferMemoryLimit riboja aktyvių darbuotojų agreguotą eilėje laikomą žalių langelių krūvį ir pagal numatymą yra 16 MiB, o ParallelPeakBufferedBytes diagnostikai ir talpos testams praneša paskutinio paralelinio skaitymo piką

Kiekvienas aktyvusis darbalapis gauna nepriklausomą eilės biudžeto dalį — vėlesnis darbalapis negali išvarginti šiuo metu išvedamo; vienas langelis, viršijantis jo dalį, priimamas kaip nedalomas duomenų paketas

OnDimension, OnSheetFormat, OnColumn, OnRow, OnPane ir OnMerge atskleidžia naudojamą diapazoną, numatytuosius stulpelių plotį ir eilučių aukštį, stulpelių ištisas, eilutės aukštį ar matomumą, struktūros ir stilių indeksus, panelės būseną ir sujungtus diapazonus, nesukurdami darbalapio objektų

Išdėstymo atgaliniai iškvietimai — savavališkai ijungiami ir vyksta ribotos atminties metaduomenų praėjime prieš pasirinktojo lakšto OnCell iškvietimus; todėl sujungimų diapazonai atkeliauja prieš langelius sujungimo viduje, nors OOXML mergeCells saugo po sheetData

Kai įjungta paralelinė darbalapių analizė, išdėstymo atgaliniai iškvietimai lieka kviečiančioje gijoje ir pasirinktiems darbalapiams užbaigiami, kol darbuotojų eilės dar neištuštintos

Abort nustatymas OnCell metu pažadina užblokuotus gamintojus ir vartotojus, ribotu vidiniu žingsniu sustabdo vykstančius ZIP skaitymus ir išskleidimą, palaukia visų darbuotojų ir palieka skaitytuvą tinkamą pakartotinei naudai

Tiesioginis rašytuvo API

Klasė TXLSDirectWriter rašo eilutes tiesiogiai į ZIP failo paketą, užtikrindama minimalią atminties papildomą naštą generuojant didelius duomenų eksportus

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 rašo klasikines langelių pastabas su autoriaus metaduomenimis ir atitinkamomis VML pastabų figūromis, neįkeldamas darbalapio objektinio modelio

AddImage, AddImageFromFile ir AddImageFromStream priima dviejų langelių inkarus bei PNG, JPEG, GIF, BMP, EMF arba WMF duomenis; failų šaltiniai baigiantis lakštui tiesiai teka į ZIP įrašą, o srauto šaltiniai išlaiko tik srauto nuorodą ir užfiksuotą baitų intervalą

Kai AddImageFromStream gauna OwnsStream=True, rašytuvas tą srautą atlaisvina baigus darbalapio šonines dalis; kitu atveju kviestiejas privalo išlaikyti pozicionuojamąjį srautą gyvą iki kitos AddSheet arba Close kvietimo

AddChart ir AddChartSeries sugeneruoja stulpelinę, juostinę, linijinę, ploto, skritulinę, žiedinę ar sklaidos ChartML diagramą su formulėmis paremtomis serijomis, o AddChartXml prideda pilną kviestiejo pateiktą diagramos dalį pažangesnėms diagramų šeimoms ir plėtiniams

Komentarai, piešinių inkarai ir diagramų aprašai retinami tik dabartiniam darbalapiui; užvėrus sheetData, rašytuvas nuosekliai išveda darbalapio santykius, komentarus, VML, DrawingML, mediją ir ChartML, tuomet prieš kitą darbalapį atlaisvina šoninio kanalo būseną