Docs HotXLS

API d'infrastructure du classeur

Ces membres publics servent aux intégrations qui inspectent les I/O, implémentent des sérialiseurs ou coordonnent le calcul entre classeurs, avec les membres de classeur déclarés dans lxHandleX et le graphe d'espace de travail déclaré dans lxDepGraph

Les applications ordinaires devraient d'abord employer le formatage de cellules, SaveAs, Recalculate et les API d'espace de travail de classeurs externes ; l'enregistrement dans les pools de styles et l'ordonnancement du graphe exigent les mêmes conventions d'index et de durée de vie que les sérialiseurs et le moteur de calcul de la bibliothèque

Observation et récupération des I/O

TXLSXWorkbook.OnReadCell reçoit l'index de feuille, la ligne, la colonne, la valeur stockée et la formule de chaque cellule matérialisée pendant l'analyse XLSX, avec un indicateur Cancel inscriptible ; TXLSXWorkbook.OnWriteCell reçoit une valeur de sortie inscriptible plus des indicateurs Skip et Cancel avant la sérialisation d'une cellule, si bien qu'un hôte peut transformer ou omettre la sortie sans remplacer l'API du classeur par l'API directe de streams

Les deux callbacks emploient des coordonnées de feuilles et de cellules en base un, et leurs types déclarés sont TXLSXCellReadEvent et TXLSXCellWriteEvent ; les callbacks s'exécutent à l'intérieur de l'opération d'I/O active, donc évitez de lancer une autre opération sur le même classeur depuis un callback

TXLSXWorkbook.RecoveryMode vaut False par défaut et autorise les échecs d'analyse XML de feuilles pris en charge à devenir des diagnostics d'avertissement pendant que l'ouverture continue, en ne laissant potentiellement que des contenus de feuilles partiellement récupérés ; il ne garantit pas la récupération d'un package ZIP illisible, donc inspectez les diagnostics et les données récupérées avant d'enregistrer

TXLSXWorkbook.FireProgress distribue une phase, un état, un compteur courant et un compteur total aux gestionnaires de progression affectés, le gestionnaire legacy recevant les notifications de travail et le gestionnaire étendu tous les états ; un gestionnaire étendu peut demander une annulation, sauf que la notification de fin d'écriture ne peut pas annuler une sortie déjà validée

TXLSXWorkbook.AddDiagnostic ajoute et renvoie un diagnostic détenu par le classeur, enregistre le code, la sévérité, l'opération, le message, le code natif, le contexte de feuille et le nom de partie de package fournis, copie le nom de classe d'exception quand une exception est fournie, et invoque OnDiagnostic ; il ne prend pas possession de l'exception et ne la lève pas

function TXLSXWorkbook.AddDiagnostic(ACode: Integer;
  ASeverity: TXLSDiagnosticSeverity; AOperation: TXLSDiagnosticOperation;
  const AMessage: WideString; ANativeCode, ASheetIndex: Integer;
  const ASheetName, APartName: WideString;
  AException: Exception): TXLSDiagnostic;

Politiques de sortie et inspection du package enregistré

TXLSXWorkbook.CSVEmitFormulas vaut False par défaut et bascule la sortie CSV des résultats de formules vers le texte des formules pour les cellules à formule ; la sortie de résultat tente l'évaluation de la formule et retombe sur le texte ou la valeur stockée de la cellule quand l'évaluation échoue ; TXLSXWorkbook.CSVQuoteAllStrings vaut aussi False par défaut et force les guillemets autour des champs de texte tandis que nombres, dates, Boolean, Null et Empty gardent les règles de citation normales

TXLSXWorkbook.LastSaveUsedStreaming indique si l'enregistrement préparé le plus récent a employé le streaming de feuilles, tandis que TXLSXWorkbook.LastSavePeakRowXmlChars signale le plus grand fragment XML de ligne mis en tampon, TXLSXWorkbook.LastSaveBufferedWorksheetXmlChars le XML de feuilles mis en tampon au total, et TXLSXWorkbook.LastSavePeakAuxiliaryXmlChars le plus grand fragment XML auxiliaire suivi ; ce sont des comptages de caractères issus de l'instrumentation du sérialiseur, pas des mesures de la mémoire totale du processus, et la sortie ODS n'emprunte pas le chemin de streaming de feuilles XLSX

TXLSXWorkbook.TryCopyPreservedPart tente de copier une partie source préservée éligible, sa représentation compressée comprise, vers un TZipArchive de destination fourni par l'appelant, en renvoyant True si la copie a eu lieu et False quand une sérialisation normale est requise ; la source doit rester disponible depuis une ouverture adossée à un fichier, et les parties manquantes ou explicitement abandonnées ne peuvent pas être copiées

L'appelant détient l'archive de destination et doit la finaliser normalement ; un échec de rollback de copie compressée peut toujours lever une exception, et ce helper ne construit ni un package de classeur complet ni la mise à jour de ses relations et types de contenu

Chiffrement et métadonnées du classeur

TXLSXWorkbook.SaveAsEncryptedAgile accepte un nom de fichier et un mot de passe non vide, sérialise le package XLSX en mémoire et écrit le conteneur chiffré Agile, en renvoyant 1 en cas de succès ou -1 en cas d'échec signalé ; le VerifyEncryptedSave facultatif effectue une vérification de réouverture après l'écriture, et la méthode exige de la mémoire pour le package non chiffré aussi bien que pour ses octets sérialisés

TXLSXWorkbook.VerifyEncryptedFile ouvre le fichier et le mot de passe fournis dans un classeur temporaire et ne renvoie True que si cette ouverture réussit, en convertissant les exceptions en False ; cela vérifie la lisibilité plutôt que de comparer chaque cellule au classeur courant, et suit le comportement normal d'OpenEncrypted pour une entrée XLSX non chiffrée

TXLSXWorkbook.DocSecurity stocke le champ de bits étendu des propriétés du document : 1 désigne la protection par mot de passe, 2 la recommandation lecture seule, 4 le statut lecture seule imposé et 8 le verrouillage des annotations ; ces bits de métadonnées n'appliquent pas eux-mêmes de chiffrement ni de restrictions d'accès

TXLSXWorkbook.DocPropsTouched est l'indicateur en lecture seule employé par les rédacteurs de propriétés du document pour décider si les propriétés suivies ont été configurées ; les setters de propriétés suivies comme Title l'activent, tandis que des métadonnées étendues affectées directement ne l'activent pas automatiquement

TXLSXWorkbook.WorkbookProtectHash expose le hash legacy de protection du classeur chargé ou généré, normalement quatre chiffres hexadécimaux ou une chaîne vide quand aucun hash de mot de passe n'existe ; employez les méthodes de protection du classeur pour changer la protection au lieu d'affecter cette valeur en lecture seule, et gardez la protection de la structure du classeur séparée du stockage de fichiers chiffrés

TXLSXWorkbook.ThemeMajorFont et TXLSXWorkbook.ThemeMinorFont exposent les polices de titres et de corps chargées depuis le thème et surchargent les noms quand le thème Office par défaut est généré ; un thème préservé verbatim prime sur ces réglages de noms de polices

Styles de tables et pools de styles du sérialiseur

TXLSXWorkbook.DefaultTableStyleName et TXLSXWorkbook.DefaultPivotStyleName font des allers-retours avec les noms par défaut stockés dans la table de styles pour les tables Excel et tableaux croisés dynamiques nouvellement insérés ; les affecter ne reformate pas directement tous les objets existants

TXLSXWorkbook.ResolveTableStyle renvoie un style personnalisé détenu par le classeur par nom, sinon résout et met en cache les styles intégrés pris en charge de TableStyleLight1 à TableStyleLight21, de TableStyleMedium1 à TableStyleMedium28 ou de TableStyleDark1 à TableStyleDark11, et renvoie nil pour un nom inconnu ; ne libérez pas le style renvoyé

TXLSXWorkbook.FastStyleAppend vaut False par défaut et permet aux créations en masse de sauter les scans de déduplication des pools de styles et l'enregistrement ordinaire des styles composites, en échangeant une table de styles plus grande contre une insertion plus rapide quand de nombreux styles distincts sont créés

function TXLSXWorkbook.RegisterCompositeXf(
  AFont, AFill, ABorder, ANumFmt, AAlign, AProt: Integer): Integer; overload;
function TXLSXWorkbook.RegisterCompositeXf(
  AFont, AFill, ABorder, ANumFmt, AAlign, AProt,
  ABuiltinNumFmt: Integer): Integer; overload;
function TXLSXWorkbook.RegisterLinkedCompositeXf(
  AFont, AFill, ABorder, ANumFmt, AAlign, AProt,
  AParentXfId: Integer; ALinkedParts: TXLSXFormatParts): Integer;

TXLSXWorkbook.RegisterCompositeXf enregistre les indices combinés de police, remplissage, bordure, format de nombre, alignement et protection, et renvoie l'indice absolu cellXfs, pas un emplacement du pool composite ; l'overload à sept arguments accepte un ID de format de nombre intégré qui prime sur l'indice de format personnalisé fourni, zéro signifiant aucune surcharge

TXLSXWorkbook.RegisterLinkedCompositeXf enregistre en plus l'ID du style-XF parent et les parties de format liées à ce parent, en conservant des entrées séparées pour différentes combinaisons de parent ou de liaison ; il renvoie aussi un indice absolu cellXfs

TXLSXWorkbook.CompositeXfBase renvoie le premier indice composite absolu, calculé à partir des pools de styles unidimensionnels courants, tandis que TXLSXWorkbook.CompositeXfCount compte les entrées composites enregistrées ; un emplacement de pool employé par GetCompositeXf vaut l'indice absolu moins la base, et la base peut changer quand ces pools grandissent, donc ces valeurs appartiennent à l'état de sérialisation courant

TXLSXWorkbook.RegisterCondDxf enregistre une référence TXLSDxfStyle empruntée et renvoie son ID de style différentiel en base zéro, en réutilisant un ID existant pour la même référence d'objet ; gardez l'objet en vie tant que la sérialisation l'emploie

TXLSXWorkbook.ResetCondDxfs vide le compteur du registre actif sans libérer les styles empruntés, et TXLSXWorkbook.CondDxfCount signale ce compteur ; la préparation de l'enregistrement reconstruit ce registre, donc ne persistez pas ces IDs indépendamment du package en cours d'écriture

TXLSXWorkbook.PivotCaches est la collection TXLSPivotCaches détenue par le classeur et partagée par les tableaux croisés dynamiques des feuilles ; AddPivotTable réutilise un cache source correspondant ou en crée un, et RefreshPivotCache actualise le cache identifié tout en préservant les identités de membres prises en charge

Intégration du calcul

TXLSXWorkbook.RecalcThreads vaut zéro par défaut, avec zéro ou un pour un recalcul série et des valeurs plus grandes pour une évaluation par workers des frontières de formules indépendantes ; les classeurs avec tableaux dynamiques emploient une passe série quelle que soit cette valeur, les nœuds de tables de données what-if restent série, et les gestionnaires de fonctions utilisateur employés par les workers doivent être thread-safe

TXLSXWorkbook.SolveCycleIteratively est un point d'entrée avancé normalement invoqué par Recalculate quand l'itération est activée, consommant les indices de nœuds du graphe de dépendances courant de ce classeur et évaluant les nœuds de cycles dans le TList fourni ; les indices d'un graphe d'espace de travail ou d'un autre classeur ne sont pas interchangeables

Le solveur emploie IterateCount et IterateDelta, conserve les valeurs finales même si la limite d'itérations est atteinte, et renvoie lxOk sans certifier la convergence ; les membres de cycles de tableaux dynamiques renvoient lxErrorCircumRef, et l'argument CycleCount de la signature ne remplace pas la classification des cycles sur les nœuds du graphe

Construction du graphe de dépendances d'espace de travail

TXLSWorkspaceDepGraph stocke les dépendances de formules entre des identités de classeurs et de feuilles fournies par l'appelant, sans ouvrir de classeurs ni évaluer de formules ; construisez un graphe à partir des formules courantes et des références résolues, puis reconstruisez-le après des changements structurels ou de formules qui invalident ces références

function TXLSWorkspaceDepGraph.AddNode(
  const AWorkbookIdentity, ASheetName: WideString;
  ASheetIndex, ARow, ACol, AOutRow2, AOutCol2: Integer;
  AVolatile: Boolean; AReferences: TXLSWorkspaceDepReferenceList;
  ARefUnstable: Boolean = False): Integer;
procedure TXLSWorkspaceDepGraph.DirtyTopoOrder(AOrder: TList;
  out ACycleNodeCount, ABlockedNodeCount: Integer);

TXLSWorkspaceDepGraph.AddNode ajoute un nœud de formule et renvoie son indice de nœud en base zéro, en copiant les références fournies sans posséder leur liste ; les indices de feuilles sont en base un, tandis que les coordonnées de lignes et de colonnes, coin inférieur droit du rectangle de sortie inclusif compris, sont des coordonnées du calculator en base zéro

TXLSWorkspaceDepReferenceList.Add ajoute un enregistrement de référence résolue de cellule, plage ou nom défini, TXLSWorkspaceDepReferenceList.Items lit ces enregistrements par indice en base zéro, et TXLSWorkspaceDepReferenceList.Clear réinitialise la liste pour réutilisation ; l'appelant détient cette liste d'entrée et peut la vider ou la libérer après que AddNode a copié ses entrées

TXLSWorkspaceDepGraph.BuildEdges résout les références stockées de cellules et de plages contre les rectangles de sortie des formules ; les références marquées LookupScan propagent la salissure mais n'imposent pas d'ordre d'évaluation et ne participent pas à la détection de cycles

TXLSWorkspaceDepGraph.NodeIndexOf résout un classeur, une feuille, une ligne et une colonne vers un indice de nœud en base zéro ou -1 en cas d'absence, en employant le nom de feuille quand il est disponible et l'indice de feuille déclaré en repli

TXLSWorkspaceDepGraph.FindDependentsOfDefinedName vide un TList non nil fourni et le remplit des indices de nœuds qui se réfèrent directement au symbole nommé dans le classeur et la portée spécifiés, un indice de portée négatif visant toutes les portées ; les entrées sont encodées en Pointer(NativeInt(NodeIndex)), si bien qu'une entrée de liste nil peut représenter le nœud zéro

Générations de salissure et ordre d'évaluation de l'espace de travail

TXLSWorkspaceDepGraph.BeginDirtyGeneration démarre une nouvelle génération, réinitialise le compteur de nœuds sales actif et les indicateurs de blocage par cycles, et rend inactifs les tampons de salissure antérieurs ; appelez-le avant de marquer les nœuds d'une nouvelle passe de recalcul

TXLSWorkspaceDepGraph.MarkAllDirty marque chaque nœud de la génération courante ; TXLSWorkspaceDepGraph.MarkWorkbookDirty amorce les nœuds appartenant au classeur identifié et les nœuds qui s'y réfèrent, puis propage aux dépendants, tandis que TXLSWorkspaceDepGraph.MarkVolatileDirty amorce les nœuds volatils et TXLSWorkspaceDepGraph.MarkCyclesDirty amorce les composantes de cycles détectées, en propageant aussi leur salissure

TXLSWorkspaceDepGraph.IsNodeDirty indique si un nœud valide porte le tampon de la génération courante et renvoie False pour un indice invalide ; TXLSWorkspaceDepGraph.DirtyGeneration expose ce tampon et TXLSWorkspaceDepGraph.DirtyNodeCount compte les nœuds marqués dans la génération active

TXLSWorkspaceDepGraph.DirtyTopoOrder exige un TList non nil détenu par l'appelant, le vide et le remplit des indices de nœuds sales dans l'ordre des dépendances, en excluant les nœuds de cycles sales et les nœuds bloqués par ces cycles ; ses deux compteurs de sortie distinguent les membres de cycles des nœuds en aval bloqués, et les entrées de la liste emploient la même convention d'indice en base zéro encodé en pointeur

TXLSWorkspaceDepGraph.HasRefUnstable indique si un nœud au moins a été ajouté avec l'indicateur de référence instable, ce qui permet à l'appelant d'éviter de compter sur un ordonnancement statique périmé quand des références de formules peuvent changer au moment de l'évaluation ; le graphe ne résout pas lui-même ces références changeantes

Inspection du graphe d'espace de travail

TXLSWorkspaceDepGraph.NodeCount compte les nœuds de formules, TXLSWorkspaceDepGraph.ReferenceCount compte les références copiées, et TXLSWorkspaceDepGraph.EdgeCount signale les arêtes de dépendances construites ; appelez BuildEdges avant de consommer les statistiques d'arêtes

TXLSWorkspaceDepGraph.WorkbookCount compte les identités de classeurs internées, identités introduites par des références comprises, et TXLSWorkspaceDepGraph.WorkbookIdentities les énumère par indice en base zéro ; ces chaînes d'identité sont des clés de graphe, pas la preuve qu'un fichier externe a été chargé

TXLSWorkspaceDepGraph.ComponentCount signale le nombre de composantes fortement connexes après construction des composantes, déclenchée par MarkCyclesDirty, DirtyTopoOrder ou l'accès aux composantes ; chaque enregistrement Components fournit NodeStart, NodeCount et IsCycle

TXLSWorkspaceDepGraph.ComponentNodes expose le tableau aplati d'indices de nœuds en base zéro pour ces composantes, indexé du NodeStart d'une composante jusqu'à NodeStart + NodeCount - 1 ; les compteurs et enregistrements indexés décrivent le graphe courant et doivent être reacquis après reconstruction du graphe

Poursuivez avec les membres supplémentaires de la facade XLSX et la vue d'ensemble de la facade XLSX pour les points d'entrée ordinaires du classeur