HotXLS dokumentáció

Ritka vázlatgeometria

Az lxOutline egység enginsemleges geometriát és mutációtervezést biztosít sor- és oszlopvázlatokhoz
Csak a materializált szakaszokat tárolja, a szomszédos vázlatszint-átmenetekből felismeri az összegző csomópontokat, és tömörített állapotváltozásokat hoz létre az összegzés-utáni és összegzés-előti elrendezésekhez anélkül, hogy minden munkalapkoordinátához bejegyzést foglalna

Alaptípusok

TXLSOutlineAxis = (xoaRows, xoaColumns);

TXLSOutlineChildMode = (xocPreserve, xocCollapse, xocExpand);

TXLSOutlineMutationPlan = class
  constructor Create(AAxis: TXLSOutlineAxis);
  procedure Clear;
  property Axis: TXLSOutlineAxis;
  property Count: Integer;
  property Changes[Index: Integer]: TXLSOutlineStateChange;
end;

TXLSOutlineGeometry = class
  constructor Create(AAxis: TXLSOutlineAxis;
    ASummaryAfter: Boolean);
  procedure Clear;
  property Axis: TXLSOutlineAxis;
  property SpanCount: Integer;
  procedure AddSpan(AFirstIndex, ALastIndex, ALevel: Integer;
    AHidden, ACollapsed: Boolean);
  function TryGetNode(ANodeIndex: Integer;
    out ANode: TXLSOutlineNode): Boolean;
  function TryBuildNodeCollapsePlan(ANodeIndex: Integer;
    ACollapsed: Boolean; AChildMode: TXLSOutlineChildMode;
    APlan: TXLSOutlineMutationPlan): Boolean;
  procedure BuildDisplayLevelPlan(ADisplayLevel: Integer;
    AChildMode: TXLSOutlineChildMode;
    APlan: TXLSOutlineMutationPlan);
end;
A sor- és oszlopindexek 1-alapúak, a vázlatszintek nem negatívak, és a szakaszokat szigorúan növekvő, nem átfedő sorrendben kell hozzáadni
Az azonos szintű, rejtett és összecsukott állapotú szomszédos szakaszok automatikusan egyesülnek; a kihagyott indexek implicit nullaszintűek, látható állapotúak és nincs összecsukás-jelölőjük
Mindkét osztály megjegyzi a konstrukcióból származó Axis értékét, a Clear kiüríti a tervet vagy geometriát az újrahasznosításhoz a belső pufferek újrafoglalása nélkül, a SpanCount pedig jelenti, hány egyesített szakaszt tart a geometria jelenleg

Csomópont-szemantika

NodeIndexA hívó által lekérdezett fizikai összegző sor vagy oszlop
FirstDetailIndex / LastDetailIndexAz összefüggő részletartomány, amelynek szintje mélyebb, mint az összegző elemé
SummaryLevelAz összegző elemen tárolt vázlatszint, vagy nulla, ha az elem nincs materializálva
LevelA csomópont által reprezentált csoportszint, egyenlő SummaryLevel + 1 értékkel
SummaryHiddenAz összegző elemen tárolt rejtett állapot
CollapsedAz összegző elemen tárolt explicit összecsukás-jelölő
SummaryAfterTrue, ha a részletek megelőzik az összegző elemet, false, ha követik azt
A beágyazott csoportok függetlenek maradnak, mert minden lekérdezés megáll az első olyan szomszédos szakasznál, amelynek szintje nem mélyebb, mint a kiválasztott összegző elemé
Egy hézag is lezárja a részletartományt, így a ritka metaadatok nem hidalhatják át véletlenül a nem használt koordinátákat egyetlen csoporttá

Mutációtervek

A mutációterv rendezett, 1-alapú tartományokat és olyan mezőmaszkot tartalmaz, amely jelzi, hogy az egyes tartományok a rejtett állapotot, az összecsukott állapotot vagy mindkettőt változtatják-e meg; a szomszédos egyenértékű változások automatikusan egyesülnek
xocPreserveA kiválasztott csomópontot változtatja meg az utódok összecsukás-jelölőinek megtartásával, ami a beágyazott csoportok alapértelmezett viselkedése
xocCollapseÖsszecsukottnak jelöli az utódcsomópontokat, ha azok a kiválasztott csomóponton belül vannak, vagy a kért megjelenítési szint alatt rejtve vannak
xocExpandTörli az utódok összecsukás-jelölőit, ha azok a kiválasztott csomóponton belül vannak, vagy a kért megjelenítési szint alatt rejtve vannak
Egy szülő kibontása xocPreserve esetén felfedi a közvetlen részleteket, miközben az összecsukott gyerekekhez tartozó részletek rejtve maradnak; egy összecsukott ősön belüli gyerek kibontása nem fed fel tartalmat ezen az ősn keresztül
A megjelenítési szintek 1-alapúak: az 1-es szint minden legfelső szintű csoportot összecsuk, és minden magasabb érték egy további vázlatszintet fed fel, miközben beállítja a megfelelő határcsomópont-jelölőket
Ugyanazon kért állapot felépítése olyan geometriából, amely már tartalmazza azt, üres tervet eredményez, és egy nem csomópont lekérdezése false értéket ad üres tervvel
A csomópontműveletek változatlanul hagyják a kiválasztott összegző elem független rejtett állapotát, és a megjelenítési szintű tervek nem fednek fel olyan nullaszintű elemeket, amelyeket egy vázlatcsoporton kívül rejtettek el

Munkalap-adapterek

function TryGetOutlineNode(AAxis: TXLSOutlineAxis;
  ANodeIndex: Integer; out ANode: TXLSOutlineNode): Boolean;
function SetOutlineNodeCollapsed(AAxis: TXLSOutlineAxis;
  ANodeIndex: Integer; ACollapsed: Boolean;
  AChildMode: TXLSOutlineChildMode = xocPreserve): Boolean;
procedure SetOutlineDisplayLevel(AAxis: TXLSOutlineAxis;
  ADisplayLevel: Integer;
  AChildMode: TXLSOutlineChildMode = xocPreserve);
A TXLSWorksheet és a TXLSXWorksheet ugyanazt a három metódust fedi fel, így a hívók 1-alapú sor- vagy oszlop-összegző csomópontot kérdezhetnek le vagy módosíthatnak geometria kézi felépítése nélkül
A klasszikus adapter csak a lefoglalt sorblokkokat és a hozzárendelt oszlop-metaadatokat olvassa, míg az XLSX adapter az egyetlen tömörített mutációterv egyetlen írási tranzakcióban történő alkalmazása előtt egyesíti a ritka vázlatszint-, rejtett és összecsukott listáit
Az OpenDocument sor- és oszlopcsoportok megőrzik natív, beágyazott table:display állapotukat; a közvetlen metaadat-szerkesztések és a strukturális sor- vagy oszlopváltozások biztonságosan vetítik ezt az állapotot a logikai összegző csomópontra, az XLSX-re konverzió pedig az összecsukás-jelölőt az XLSX összegző elemére írja, nem pedig minden csoporttagra
A meglévő TXLSXWorksheet.ToggleRowGrouped és ToggleColGrouped metódusok kompatibilitási burkolókként továbbra is elérhetők; argumentumuk az első részletsor vagy -oszlop, a burkoló pedig az irányérzékeny összegző csomópontot oldja fel, mielőtt átváltaná azt

Delphi-példa

Geometry := TXLSOutlineGeometry.Create(xoaRows, True);
Plan := TXLSOutlineMutationPlan.Create(xoaRows);
try
  Geometry.AddSpan(2, 4, 1, False, False);
  Geometry.AddSpan(5, 5, 0, False, False);

  if Geometry.TryGetNode(5, Node) then
    UseOutlineNode(Node.FirstDetailIndex,
      Node.LastDetailIndex, Node.Collapsed);

  if Geometry.TryBuildNodeCollapsePlan(5, True,
    xocPreserve, Plan) then
    ApplyOutlineChanges(Plan);
finally
  Plan.Free;
  Geometry.Free;
end;

C++Builder-példa

Lxoutline::TXLSOutlineGeometry *geometry =
  new Lxoutline::TXLSOutlineGeometry(Lxoutline::xoaColumns, false);
try {
  geometry->AddSpan(3, 3, 0, false, true);
  geometry->AddSpan(4, 7, 1, true, false);

  Lxoutline::TXLSOutlineNode node;
  if (geometry->TryGetNode(3, node))
    UseOutlineNode(node.FirstDetailIndex, node.LastDetailIndex,
      node.Collapsed);
}
__finally {
  delete geometry;
}

Teljesítmény és hatókör

A csomópontkeresés bináris keresést használ, amelyet csak a kiválasztott csoport által átszelt szomszédos materializált szakaszok követnek, ami O(log n + k) munkát ad n szakaszra és k meglátogatott szakaszra
A tömeges mutációtervezés lineáris, monoton veremes menettel tárja fel az összes materializált csomópontot, egyesíti az összecsukott láthatósági intervallumokat, és tömörített tartományváltozásokat bocsát ki a nem használt koordináták meglátogatása nélkül
Az építő elfogadja az utolsó XLSX munkalapsort, miközben csak a megadott szakaszokat tartja meg, így egy magas koordináta nem jelent milliónyi bejegyzés foglalását vagy átvizsgálását
A munkalap-adapter regressziós kapuja ugyanazt a 32,768 csomópontlekérdezést és 2,048 összecsukási vagy kibontási mutációt futtatja le a 8. sor és az 1,048,576. sor közelében lévő hat materializált sorbejegyzésen, nulla cellamaterializálást igényel, és a magas koordinátájú költséget az alacsony koordinátájú kiindulási értékhez viszonyítva korlátozza
A TXLSOutlineGeometry soha nem ír közvetlenül munkafüzetadatokat; az enginadapterek validálják és alkalmazzák a visszaadott tervet, így a geometriaelemzés és az állapotmutáció külön marad

Lásd még

További klasszikus XLS API tagok
Speciális XLSX API-tagok
További könyvtári API-tagok