Τεκμηρίωση HotXLS

Αραιή γεωμετρία περιγράμματος

Η μονάδα lxOutline παρέχει γεωμετρία και σχεδιασμό μεταβολών ανεξάρτητο από μηχανή για περιγράμματα σειρών και στηλών
Αποθηκεύει μόνο υλοποιημένα διαστήματα, αναγνωρίζει κόμβους σύνοψης από γειτονικές μεταβάσεις επιπέδου περιγράμματος και δημιουργεί συμπιεσμένες αλλαγές κατάστασης για τις διατάξεις σύνοψης-μετά και σύνοψης-πριν, χωρίς να δεσμεύει μια εγγραφή για κάθε συντεταγμένη του φύλλου εργασίας

Βασικοί τύποι

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;
Οι δείκτες σειρών και στηλών έχουν αρίθμηση από τη μονάδα, τα επίπεδα περιγράμματος είναι μη αρνητικά και τα διαστήματα πρέπει να προστίθενται σε αυστηρά αύξουσα, μη αλληλεπικαλυπτόμενη σειρά
Γειτονικά διαστήματα με ίδιο επίπεδο και ίδια κατάσταση κρυφού και συμπτυγμένου συγχωνεύονται αυτόματα· οι παραλειπόμενοι δείκτες έχουν σιωπηρό επίπεδο μηδέν, ορατή κατάσταση και χωρίς δείκτη σύμπτυξης
Και οι δύο κλάσεις θυμούνται τον Axis τους από τη δημιουργία, η Clear αδειάζει ένα σχέδιο ή γεωμετρία για επαναχρησιμοποίηση χωρίς επαναδέσμευση των εσωτερικών buffer, και το SpanCount αναφέρει πόσα συγχωνευμένα διαστήματα κρατά αυτή τη στιγμή η γεωμετρία

Σημασιολογία κόμβων

NodeIndexΗ φυσική σειρά ή στήλη σύνοψης που ερωτά ο καλών
FirstDetailIndex / LastDetailIndexΤο συνεχές εύρος λεπτομερειών του οποίου το επίπεδο είναι βαθύτερο από το στοιχείο σύνοψης
SummaryLevelΤο επίπεδο περιγράμματος αποθηκευμένο στο στοιχείο σύνοψης, ή μηδέν όταν αυτό το στοιχείο δεν είναι υλοποιημένο
LevelΤο επίπεδο ομάδας που αναπαριστά ο κόμβος, ίσο με SummaryLevel + 1
SummaryHiddenΗ κατάσταση κρυφού αποθηκευμένη στο στοιχείο σύνοψης
CollapsedΟ ρητός δείκτης σύμπτυξης αποθηκευμένος στο στοιχείο σύνοψης
SummaryAfterTrue όταν οι λεπτομέρειες προηγούνται του στοιχείου σύνοψης, false όταν έπονται
Οι εμφωλευμένες ομάδες παραμένουν ανεξάρτητες επειδή κάθε ερώτημα σταματά στο πρώτο γειτονικό διάστημα του οποίου το επίπεδο δεν είναι βαθύτερο από το επιλεγμένο στοιχείο σύνοψης
Ένα κενό τερματίζει επίσης το εύρος λεπτομερειών, ώστε αραιά μεταδεδομένα να μην μπορούν να γεφυρώσουν κατά λάθος αχρησιμοποίητες συντεταγμένες σε μία ομάδα

Σχέδια μεταβολών

Ένα σχέδιο μεταβολών περιέχει διατεταγμένα εύρη με αρίθμηση από τη μονάδα και μια μάσκα πεδίων που δηλώνει αν κάθε εύρος αλλάζει την κατάσταση κρυφού, την κατάσταση συμπτυγμένου ή και τα δύο· γειτονικές ισοδύναμες αλλαγές συγχωνεύονται αυτόματα
xocPreserveΑλλάζει τον επιλεγμένο κόμβο διατηρώντας τους δείκτες σύμπτυξης των απογόνων, που είναι η προεπιλεγμένη συμπεριφορά εμφωλευμένων ομάδων
xocCollapseΣημειώνει τους κόμβους απογόνους ως συμπτυγμένους όταν βρίσκονται μέσα στον επιλεγμένο κόμβο ή είναι κρυφοί κάτω από το ζητούμενο επίπεδο εμφάνισης
xocExpandΚαθαρίζει τους δείκτες σύμπτυξης των κόμβων απογόνων όταν βρίσκονται μέσα στον επιλεγμένο κόμβο ή είναι κρυφοί κάτω από το ζητούμενο επίπεδο εμφάνισης
Η ανάπτυξη γονέα με xocPreserve αποκαλύπτει τις άμεσες λεπτομέρειες ενώ οι λεπτομέρειες συμπτυγμένων τέκνων παραμένουν κρυφές· η ανάπτυξη ενός τέκνου μέσα σε συμπτυγμένο πρόγονο δεν εκθέτει περιεχόμενο μέσω εκείνου του προγόνου
Τα επίπεδα εμφάνισης έχουν αρίθμηση από τη μονάδα: το επίπεδο 1 συμπτύσσει κάθε ομάδα κορυφαίου επιπέδου, και κάθε μεγαλύτερη τιμή αποκαλύπτει ένα επιπλέον επίπεδο περιγράμματος ενώ ορίζει τους αντίστοιχους δείκτες οριακού κόμβου
Η κατασκευή της ίδιας ζητούμενης κατάστασης από γεωμετρία που την περιέχει ήδη παράγει κενό σχέδιο, και το ερώτημα για μη κόμβο επιστρέφει false με κενό σχέδιο
Οι λειτουργίες κόμβων αφήνουν την ανεξάρτητη κατάσταση κρυφού του επιλεγμένου στοιχείου σύνοψης αμετάβλητη, και τα σχέδια επιπέδου εμφάνισης δεν επανεμφανίζουν στοιχεία επιπέδου μηδέν που κρύφτηκαν εκτός ομάδας περιγράμματος

Προσαρμογείς φύλλου εργασίας

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);
Το TXLSWorksheet και το TXLSXWorksheet εκθέτουν τις ίδιες τρεις μεθόδους, ώστε οι καλούντες να μπορούν να ερωτήσουν ή να αλλάξουν έναν κόμβο σύνοψης σειράς ή στήλης με αρίθμηση από τη μονάδα χωρίς να χτίσουν γεωμετρία χειροκίνητα
Ο κλασικός προσαρμογέας διαβάζει μόνο τα δεσμευμένα μπλοκ σειρών και τα ανατεθειμένα μεταδεδομένα στηλών, ενώ ο προσαρμογέας XLSX συγχωνεύει τις αραιές λίστες επιπέδου περιγράμματος, κρυφού και σύμπτυξης πριν εφαρμόσει ένα συμπιεσμένο σχέδιο μεταβολών σε μία συναλλαγή εγγραφής
Οι ομάδες σειρών και στηλών OpenDocument διατηρούν την εγγενή εμφωλευμένη κατάσταση table:display τους· οι άμεσες αλλαγές μεταδεδομένων και οι δομικές αλλαγές σειρών ή στηλών προβάλλουν με ασφάλεια αυτή την κατάσταση στον λογικό κόμβο σύνοψης, και η μετατροπή σε XLSX γράφει τον δείκτη σύμπτυξης στο στοιχείο σύνοψης XLSX αντί σε κάθε μέλος της ομάδας
Οι υπάρχουσες μέθοδοι TXLSXWorksheet.ToggleRowGrouped και ToggleColGrouped παραμένουν διαθέσιμες ως wrappers συμβατότητας· το όρισμά τους είναι η πρώτη σειρά ή στήλη λεπτομερειών, και το wrapper επιλύει τον ευαίσθητο στην κατεύθυνση κόμβο σύνοψης πριν τον αλλάξει

Παράδειγμα Delphi

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

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;
}

Απόδοση και εμβέλεια

Η αναζήτηση κόμβου χρησιμοποιεί δυαδική αναζήτηση ακολουθούμενη μόνο από τα γειτονικά υλοποιημένα διαστήματα που διασχίζει η επιλεγμένη ομάδα, προσφέροντας κόστος O(log n + k) για n διαστήματα και k επισκεφθέντα διαστήματα
Ο σχεδιασμός μαζικών μεταβολών ανακαλύπτει κάθε υλοποιημένο κόμβο με μια γραμμική διέλευση μονοτονικής στοίβας, συγχωνεύει τα διαστήματα ορατότητας συμπτυγμένων στοιχείων και εκπέμπει συμπιεσμένες αλλαγές εύρους χωρίς να επισκέπτεται αχρησιμοποίητες συντεταγμένες
Ο builder δέχεται την τελευταία σειρά φύλλου εργασίας XLSX διατηρώντας μόνο τα δοθέντα διαστήματα, ώστε μια υψηλή συντεταγμένη δεν συνεπάγεται δέσμευση ή σάρωση εκατομμυρίων εγγραφών
Η πύλη παλινδρόμησης των προσαρμογέων φύλλου εργασίας εκτελεί τα ίδια 32,768 ερωτήματα κόμβων και 2,048 μεταβολές σύμπτυξης ή ανάπτυξης πάνω σε έξι υλοποιημένες εγγραφές σειρών κοντά στη σειρά 8 και τη σειρά 1,048,576, απαιτεί μηδενική υλοποίηση κελιών και οριοθετεί το κόστος υψηλής συντεταγμένης έναντι της γραμμής αναφοράς χαμηλής συντεταγμένης
Το TXLSOutlineGeometry δεν γράφει ποτέ απευθείας δεδομένα βιβλίου εργασίας· οι προσαρμογείς μηχανών επικυρώνουν και εφαρμόζουν το επιστρεφόμενο σχέδιο, επιτρέποντας στην ανάλυση γεωμετρίας και στη μεταβολή κατάστασης να παραμένουν ξεχωριστές

Δείτε επίσης

Πρόσθετα μέλη κλασικού API XLS
Προηγμένα μέλη API XLSX
Πρόσθετα μέλη API της βιβλιοθήκης