Membres d'API supplémentaires de la bibliothèque
Cette page complète la référence des types publics qui prennent en charge les API principales de classeur, de feuille de calcul, de rendu, d'importation, de diagnostics et de visionneuse mais ne nécessitent pas de guide dédié distinct
Filtrage et mise en forme conditionnelle
TXLSAutofilter | Add, AddAutofilterData, AssignFrom, Clearet ParseAutofilterData modifient ou importent la définition du filtre ; SetRangeBounds(ARow1, ACol1, ARow2, ACol2) restaure des bornes inclusives en base 1 sans retirer les critères chargés ni les formes de menus déroulants, et ignore les bornes non positives ou inversées ainsi qu'un nombre de colonnes différent des champs chargés ; Defined, FirstRow, FirstCol, LastCol, LastRowet FieldCount exposent ses limites actives et le nombre de colonnes filtrées |
TXLSAutofilterItem | Shape expose le dessin du bouton de filtre associé à l'élément, et le critère de filtre chargé est disponible sous forme d'enregistrement d'opérande TXLSAutofilterDOPER — DataType sélectionne la forme de l'opérande et grbitSgn porte les bits de signe et d'indicateurs — pour l'inspection ou l'édition aller-retour |
TXLSDataBarSpec | AxisColor, AxisIsThemeColor, AxisThemeColorId, AxisThemeColorTintet ClearAxisThemeColor contrôlent l'axe ; Direction, GradientFill, NegativeBarBorderColorSameAsPositive, NegativeBarColor, NegativeBarColorSameAsPositiveet NegativeBorderColor contrôlent l'apparence des barres ; IsIndexedColor, IndexedColorIndexet ClearIndexedColor gèrent la couleur de barre par index de palette |
TXLSIconSetSpec | ThresholdEqualsInclude sélectionne une comparaison inclusive ou exclusive pour chaque seuil d'icône |
TXLSCfValue | IsIndexedColor et IndexedColorIndex signalent une couleur de seuil stockée sous forme d'index de palette hérité, ClearIndexedColor supprime à nouveau cette forme, et les couleurs de thème ou littérales restent disponibles via les accesseurs existants |
TXLSCfValue, TXLSDataBarSpec, TXLSColorScaleSpec, TXLSIconSetSpecet TXLSDxfStyle acceptent AttachWriteGuardOwner, reliant l'objet de règle à son classeur propriétaire afin que les modifications acquièrent automatiquement une garde d'écriture ; le propriétaire implémente TXLSCondFormatWriteGuardOwner, dont l'unique méthode AcquireWriteGuard remet à la règle la garde d'écriture du classeur. TXLSDxfStyle ajoute FontColorIndex avec FontColorIsIndexed ainsi que les paires FillFgColorIndex / FillFgColorIsIndexed et FillBgColorIndex / FillBgColorIsIndexed pour les couleurs de règles par index de palette, plus les surcharges de police différentielle FontName, FontSizeet FontScheme (chaîne vide, une taille en points ou un emplacement de police de thème tel que major / minor) à côté des membres gras, italique, souligné et couleur existants ; chaque affectation acquiert la garde d'écriture et marque la règle comme sale pour réémission
TXLSConnections, TXLSDataTableset TXLSQueryTables exposent OnAcquireWriteGuard (types TXLSConnectionAcquireWriteGuard, TXLSDataTableAcquireWriteGuardet TXLSQueryTableAcquireWriteGuard), le hook que leurs chemins de modification utilisent pour obtenir le IXLSWorkbookWriteGuard du classeur propriétaire avant toute mutation et pour faire avancer ensuite la génération du classeur ; la garde enregistre StartGenerationet Complete marque l'écriture comme terminée afin que les caches dépendants puissent être reconstruits
Les connexions de données préservées portent une description typée : TXLSConnectionKind (xlckUnknown, xlckOdbc, xlckDao, xlckFile, xlckWeb, xlckOleDb, xlckText, xlckAdo) classe la connexion, TXLSConnectionCredentials (xlccIntegrated, xlccNone, xlccStored, xlccPrompt) enregistre son mode d'authentification, et chaque valeur de paramètre de connexion est étiquetée avec un TXLSConnectionParameterValueKind (xlcpvNone, xlcpvBoolean, xlcpvDouble, xlcpvInteger, xlcpvString, xlcpvCell). Les tables de données d'analyse de scénarios signalent leur type de définition stockée via TXLSDataTableKind
Tables de données d'analyse de scénarios et regroupement de tableaux croisés dynamiques
TXLSDataTable | Assign, ContainsCellet IsRoot copient et inspectent une table ; Kind, FirstRow, FirstCol, LastCol, LastRow, AlwaysCalculate, ColumnInputCol, ColumnInputRow, ColumnInputDeleted, RowInputCol, RowInputRowet RowInputDeleted exposent la définition de calcul stockée |
TXLSDataTables | Add, AddExisting, Delete, Clear, Assign, AdjustForShiftet Offset gèrent la collection ; FindByCell et FindRoot localisent la table contenant une cellule donnée ou enracinée en celle-ci ; Count, Itemset OnChange exposent l'état de la collection |
TXLSPivotCacheField | GroupBaseField et GroupParentField exposent les relations entre un champ groupé et son champ source ou parent |
Les seuils des jeux d'icônes peuvent être restitués ou validés par programmation : XLSCfIconSetCount indique combien d'icônes définit un TXLSIconSetType , et XLSBuildCfIconGeometry remplit un TXLSCfIconGeometry avec les primitives (TXLSCfIconPrimitive, de type TXLSCfIconPrimitiveKind: cfipPolygon, cfipEllipse, cfipRect, cfipLine) et les points (TXLSCfIconPoint) qui dessinent une icône, afin que les moteurs de rendu personnalisés reprennent les formes d'icônes intégrées d'Excel
Diagnostics, traçage des formules et validation
TXLSDiagnostic | Code, NativeCode, Message, Severity, ExceptionClass, PartName, RecordId, SheetIndex, SheetNameet StreamOffset identifient un diagnostic d'analyseur, d'enregistreur ou de package |
TXLSDiagnostics | Add ajoute un diagnostic, Clear réinitialise la collection, et Count plus Items énumèrent ses entrées |
TXLSDiagnosticSeverity and TXLSDiagnosticOperation | TXLSDiagnosticSeverity (xlsDiagnosticInfo, xlsDiagnosticWarning, xlsDiagnosticError, xlsDiagnosticFatal) classe un diagnostic et TXLSDiagnosticOperation (xlsOperationNone, xlsOperationOpen, xlsOperationSave, xlsOperationCalculate, xlsOperationExport) nomme la phase qui l'a produit ; les gestionnaires OnDiagnostic lisent les deux depuis le TXLSDiagnostic |
TXLSFormulaDebugSession | CurrentStep, DependencyCount, NodeCountet StepCount exposent l'instantané courant du débogueur et les tailles de sa trace |
TXLSFormulaTracer | StepCount indique le nombre d'étapes d'évaluation enregistrées |
TXLSImportCheck | AddRule, AddUniqueRuleet AddCrossColumnRule configurent des prédicats de colonnes, l'unicité composite et des comparaisons typées ; Check renvoie des violations structurées depuis les valeurs de feuilles stockées et les caches de formules sans recalcul ni matérialisation de cellules packées ; HeaderRow, FirstRow, LastRow, OnVerifyCell, ViolationCountet Violation exposent limites, callbacks et résultats ; Annotate et KeepOnlyViolations sont des opérations explicites de classeur de correction ; voir les schémas de validation d'importation pour les types, bornes, systèmes de dates, identité de tuples et comportement d'échec |
Schémas de validation d'importation
TXLSImportCheck de lxImportCheck valide une TXLSXWorksheet contre des règles détenues par l'application ; il examine les valeurs scalaires stockées et les résultats de formules stockés, avec des coordonnées de feuille en base 1 et aucune conversion implicite texte-vers-nombre, texte-vers-date ou texte-vers-booléen
Validator := TXLSImportCheck.Create;
try
Validator.HeaderRow := 1;
Rule := Validator.AddRule(2);
Rule.Name := 'quantity';
Rule.Flags := [irRequired, irValueType, irValueRange];
Rule.ValueKind := ivkInteger;
Rule.MinimumValue := 1;
Rule.MaximumValue := 1000;
Validator.AddUniqueRule([1, 3]).Name := 'account-and-region';
Validator.AddCrossColumnRule(4, 5, icLessOrEqual).Name := 'start-before-end';
FailureCount := Validator.Check(Sheet);
if FailureCount > 0 then
Validator.Annotate(Sheet, 'Import validator');
finally
Validator.Free;
end;
HeaderRow > 0 démarre la vérification à la ligne suivante et prend la précédence sur FirstRow ; sinon FirstRow vaut 1 par défaut ; LastRow = 0 utilise la dernière ligne utilisée de la feuille, tandis qu'un LastRow positif peut inclure des cellules absentes sans les créer ; les colonnes doivent être entre 1 et 16 384 et les bornes actives de lignes de données entre 1 et 1 048 576
Règles de colonnes et types explicites
TlxImportColumnRule | Column, Flags, Name, Title, MinLength, MaxLength, Pattern, ValueKindet DateSerialMode configurent une colonne ; MinimumValue, MaximumValue, HasMinimum, HasMaximum, MinimumInclusiveet MaximumInclusive configurent les bornes ; Validate vérifie la configuration du schéma et PreparePattern prépare la regex ; les deux surcharges de Check renvoient un booléen avec un message d'erreur et facultativement un TlxImportViolationKind |
TlxImportRuleFlags | irRequired, irTextLength, irPattern, irUniqueet irCallback conservent leurs contrôles existants ; irValueType active ValueKind et irValueRange active les bornes configurées ; une colonne sans indicateur n'est pas vérifiée |
TlxImportValueKind | ivkAny accepte les valeurs scalaires finies prises en charge, ivkNumber accepte les Variants numériques finis, ivkInteger exige en plus une valeur entière, ivkDate accepte les Variants date ou les numéros sériels Excel explicitement activés, ivkBoolean exige un Variant booléen, et ivkText exige un Variant chaîne |
TlxImportDateSerialMode | idsNone est le défaut et garde les valeurs numériques distinctes des dates ; idsExcel1900 et idsExcel1904 interprètent explicitement les valeurs numériques pour une colonne utilisant irValueType avec ValueKind = ivkDate |
AddRule(Column) remplace et libère toute règle précédente pour cette colonne ; les prédicats par type de valeur, plage, longueur et motif ignorent les valeurs manquantes, nulls et chaînes vides, tandis que irRequired les signale ; l'unicité conserve les politiques distinctes décrites ci-dessous ; les blancs non vides restent une valeur ; un nombre ne vaut pas booléen, une date ne vaut pas nombre ordinaire, et une chaîne d'apparence numérique reste du texte
L'affectation de MinimumValue ou MaximumValue active cette borne ; HasMinimum ou HasMaximum peut la désactiver à nouveau ; les deux commutateurs d'inclusivité valent True par défaut ; les bornes doivent être des nombres ou des dates typés finis, et deux bornes doivent être comparables et décrire un intervalle non vide ; des bornes inversées, manquantes, incompatibles ou vides lèvent une exception avant le début de la validation de la feuille
Les bornes numériques comparent des valeurs numériques et les bornes de dates comparent des dates ; les comparaisons entier-à-entier préservent tous les bits Int64 et UInt64 ; les valeurs d'une catégorie incompatible échouent au contrôle de plage ; les prédicats de longueur de texte et de regex continuent d'inspecter la représentation texte du scalaire, et les contrôles regex conservent le comportement IsMatch existant, donc utilisez des ancres comme ^...$ quand le texte complet doit correspondre ; une regex invalide désactive son contrôle de motif par compatibilité
Valeurs Excel formatées en dates
Une cellule importée d'Excel peut contenir un numéro sériel numérique même quand son format de nombre affiche une date ; choisissez explicitement un mode sériel quand c'est le schéma d'importation accepté ; le mode n'affecte que la validation et ne change jamais la valeur stockée de la cellule
Rule := Validator.AddRule(4); Rule.Flags := [irRequired, irValueType, irValueRange]; Rule.ValueKind := ivkDate; if Sheet.Workbook.Date1904 then Rule.DateSerialMode := idsExcel1904 else Rule.DateSerialMode := idsExcel1900; Rule.MinimumValue := VarFromDateTime(EncodeDate(2026, 1, 1)); Rule.MaximumValue := VarFromDateTime(EncodeDate(2026, 12, 31));
VarFromDateTime est déclaré dans Variants et EncodeDate dans SysUtils ; les numéros sériels numériques doivent être non négatifs et se résoudre avant le 1er janvier 10000 ; les sériels fractionnaires conservent leur heure du jour ; le système 1900 rejette tout sériel de 60 inclus à 61 exclus parce que cet intervalle dénote le jour bissextile fictif ; le système 1904 mappe le sériel zéro au 1er janvier 1904
Les bornes de dates incluent l'heure du jour, si bien qu'un maximum fixé à minuit le 31 décembre exclut les heures ultérieures de ce jour ; utilisez une borne supérieure exclusive au 1er janvier de l'année suivante quand la totalité du dernier jour doit être acceptée ; les dates textuelles comme 10/08/2026 restent du texte quel que soit le mode sériel configuré
Unicité composite et comparaisons inter-colonnes
AddUniqueRule(const AColumns: array of Integer): TlxImportUniqueRule | Ajoute une contrainte de tuple indépendante sur une liste ordonnée et non vide de colonnes distinctes ; Name identifie la règle, Title préfixe son message, ColumnCount et Columns[Index] en base zéro exposent ses membres, et SkipIncompleteRows vaut True par défaut |
AddCrossColumnRule(ALeftColumn, ARightColumn: Integer; AComparison: TlxImportComparison): TlxImportCrossColumnRule | Ajoute une comparaison intra-ligne avec LeftColumn et RightColumn en lecture seule, une Comparison modifiable, Name, Title et SkipBlankValues, qui vaut True par défaut |
TlxImportComparison | icEqual, icNotEqual, icLess, icLessOrEqual, icGreateret icGreaterOrEqual sélectionnent la relation ; les paires numériques et de dates comparent leurs valeurs, les paires booléennes ordonnent False avant True, et les paires de chaînes comparent ordinalement les unités de code UTF-16 sensibles à la casse |
Les clés composites conservent le type Variant exact et l'identité de texte de chaque membre ; Integer(1), Double(1), la chaîne '1', un booléen et une date sont des membres distincts ; il n'y a pas de casse unifiée, de normalisation Unicode, d'analyse de locale ni d'ambiguïté de délimiteur ; des combinaisons comme ('ab', 'c') et ('a', 'bc') restent différentes ; chaque passe de validation démarre un index de tuples frais
Quand SkipIncompleteRows = True, un membre manquant, null ou chaîne vide exclut cette ligne de l'unicité de tuple ; le mettre à False inclut ces membres avec leurs identités Variant d'origine ; un doublon signale sa première colonne de tuple comme adresse de cellule et sa première ligne correspondante via FirstDuplicateRow
Le irUnique mono-colonne existant conserve son comportement de correspondance textuelle insensible à la casse et ignore les valeurs manquantes ou null ; utilisez AddUniqueRule([Column]) quand une identité typée stricte est requise pour une colonne
Les comparaisons inter-colonnes ne convertissent jamais des chaînes en nombres, des nombres en booléens, ni des nombres ordinaires en dates ; des catégories mixtes incompatibles échouent même pour icNotEqual ; les comparaisons de chaînes distinguent Unicode composé et décomposé, préservent les caractères null incorporés, et utilisent l'ordre du préfixe le plus court d'abord ; quand SkipBlankValues = False, l'un ou l'autre opérande vide produit une violation inter-colonnes
Résultats structurés et classeurs de correction
TlxImportViolation | Row, Col, SheetNameet Address identifient la cellule, avec Address en notation A1 ; ValueText et ErrorText transportent les informations d'affichage ; RuleName et Kind identifient la règle configurée et la catégorie d'échec ; RelatedColumn identifie le second opérande d'un échec inter-colonnes et FirstDuplicateRow identifie la ligne d'origine pour les échecs d'unicité |
TlxImportViolationKind | ivRequired, ivTextLength, ivPattern, ivUnique, ivCallback, ivValueType, ivValueRange, ivCellError, ivFormulaCacheMissing, ivCompositeUniqueet ivCrossColumn distinguent les catégories d'échec prises en charge |
Check(Sheet) renvoie le nombre de violations, et ViolationCount plus Violation(Index) en base zéro énumèrent le rapport ; une règle de colonne signale son premier prédicat en échec, tandis que des règles de tuple et de comparaison configurées indépendamment peuvent ajouter d'autres violations pour la même cellule ; affectez des Name significatifs quand les appelants ont besoin d'identifiants stables de règles applicatives
Les cellules de formules sont validées à partir de leurs valeurs en cache stockées ; une formule sans résultat en cache stocké signale ivFormulaCacheMissing, et un résultat d'erreur signale ivCellError ; recalculez explicitement avant la vérification quand des résultats de formules frais sont requis ; la validation n'accède pas à des sources externes, n'altère pas les définitions de formules et n'évalue pas les formules sans cache
OnVerifyCell conserve la signature du callback TlxImportVerifyCell et s'exécute après les prédicats de colonnes applicables réussis et les contrôles d'unicité ; il renvoie un booléen et peut définir un message d'erreur applicatif ; les callbacks doivent laisser le classeur et le schéma de validation inchangés, et les écritures au classeur sont rejetées par le bail de lecture ; les exceptions de callbacks se propagent et le bail est libéré pour les opérations suivantes
Check n'annote jamais, ne supprime pas de lignes ni ne matérialise de valeurs packées ; utilisez Annotate après la vérification pour appliquer des polices rouges et ajouter du texte d'erreur aux commentaires existants, ou appelez explicitement KeepOnlyViolations pour retirer les lignes non en échec et créer un classeur de correction ; ces méthodes modifient la feuille fournie, donc appelez-les sur le classeur voulu après examen du rapport
La validation emprunte la feuille et le classeur pour l'appel synchrone ; elle n'adopte pas la propriété d'objet de l'appelant et n'exige pas un classeur détenu par interface ; un bail de lecture protège les instantanés pertinents de cellules stockées et l'accès aux caches de formules stockés pendant toute la vérification
Stratégies d'enregistrement des liens externes
TXLSExternalLinkUpdateMode = (xluPromptUser, xluNever, xluAlways);
property IXLSWorkbook.SaveExternalLinkValues: Boolean;
property IXLSWorkbook.UpdateLinks: TXLSExternalLinkUpdateMode;
property TXLSXWorkbook.SaveExternalLinkValues: Boolean;
property TXLSXWorkbook.UpdateLinks: TXLSExternalLinkUpdateMode;
xluPromptUser; xluNever et xluAlways ne modifient que la préférence de mise à jour stockée dans le classeur et n'autorisent ni n'initient jamais d'accès externe aux fichiers ou au réseau
Audit de calcul et indicateurs de classeur
function TXLSWorkbook.RecalcAndVerify(MaxIssues: Integer = 10000): TXLSCalculationAuditReport;
function TXLSXWorkbook.RecalcAndVerify(MaxIssues: Integer = 10000): TXLSCalculationAuditReport;
function TXLSWorkbook.RecalcAndVerifyEx(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSXWorkbook.RecalcAndVerifyEx(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSWorkbook.RunCalculationAudit(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSWorkbook.FormulaIsVolatile(Formula: WideString): Boolean;
function TXLSWorkbook.AuditOverlayHash(SheetIndex, Row, Col: Integer): Integer;
function TXLSWorkbook.AuditOverlayRead(SheetIndex, Row, Col: Integer; var Value: Variant): Boolean;
procedure TXLSWorkbook.AuditOverlayWrite(SheetIndex, Row, Col: Integer; const Value: Variant);
procedure TXLSWorkbook.AuditOverlayClear;
TXLSCalculationAuditIssueKind = (xlcaiCacheMismatch, xlcaiParseFailure,
xlcaiMissingFunction, xlcaiMissingName, xlcaiUnsupportedArguments,
xlcaiCircularReference, xlcaiExternalReferenceDenied,
xlcaiExternalReferenceMissing, xlcaiDataTableSkipped, xlcaiCancelled,
xlcaiInternalFailure);
TXLSCalculationAuditIssue = record
Kind: TXLSCalculationAuditIssueKind;
SheetIndex: Integer;
SheetName: WideString;
Row: Integer;
Col: Integer;
Formula: WideString;
Symbol: WideString;
Expected: Variant;
Actual: Variant;
ResultCode: Integer;
Stack: WideString;
ExternalTarget: WideString;
end;
TXLSCalculationAuditIssues = array of TXLSCalculationAuditIssue;
TXLSRecalcAuditProgress = procedure(ASender: TObject;
ACurrent, ATotal: Integer; var ACancel: Boolean) of object;
property WorkbookCodeName: WideString;
property CalculationThreadMode: TXLSCalculationThreadMode;
property ForceFullCalculationState: TXLSOptionalBooleanState;
property RefreshAllOnLoadState: TXLSOptionalBooleanState;
RecalcAndVerify combine les échecs de formules-symboles et les divergences de valeurs en cache dans des catégories structurées stables, avec coordonnées de feuille de calcul, formules, symboles, valeurs attendues et obtenues, et troncature bornée, tout en laissant les caches et la sémantique du classeur inchangés. RecalcAndVerifyEx exécute l'audit approfondi : il évalue chaque formule une fois à travers le graphe de dépendances dans une surcouche de résultats isolée afin que les cellules dépendantes lisent cette passe au lieu de caches périmés, classe les échecs d'évaluation (arguments non pris en charge, références circulaires, références externes refusées ou manquantes, tables de données ignorées, annulation, échecs internes) avec des codes de résultat, enregistre une pile d'appels bornée par échec, respecte un budget d'anomalies et un récepteur de progression/annulation, et reste en lecture seule sauf si ApplyResults valide atomiquement les valeurs recalculées après une passe entièrement réussie sur une structure de classeur inchangéeAbsoluteTolerance et RelativeTolerance contrôlent le signalement des divergences, pas les valeurs de calcul intermédiaires ni l'application explicite des caches
Pour des résultats numériques, une divergence exige une différence absolue supérieure à AbsoluteTolerance et, quand la tolérance relative est activée, supérieure à RelativeTolerance * max(abs(Expected), abs(Actual))
L'égalité à l'un ou l'autre seuil est tolérée ; les valeurs modifiées entrent quand même dans la surcouche d'audit afin que les formules dépendantes voient le calcul en cours, et ApplyResults valide ces valeurs même lorsque leurs différences ne sont pas signalables
Un audit en lecture seule ne modifie jamais les caches stockésTXLSCalculationAuditReport.Issues est un TXLSCalculationAuditIssue; Kind sélectionne l'une des catégories xlcai* , Expected / Actual portent les valeurs comparées en cas de divergence de cache, Stack est la chaîne d'appels d'évaluation bornée restituée sous la forme Sheet!A1 > Sheet!B2 (frame la plus externe en premier), et ExternalTarget décrit le classeur externe pour les anomalies de références externes. TXLSRecalcAuditOptions.OnProgress est un récepteur TXLSRecalcAuditProgress qui reçoit la progression ACurrent / ATotal des nœuds et peut positionner ACancel pour arrêter l'audit à la prochaine frontière de nœud avec une seule anomalie xlcaiCancelled issueRunCalculationAudit est le point d'entrée moteur auquel les wrappers d'audit au niveau du classeur délèguent, et il accepte le même enregistrement d'options. FormulaIsVolatile indique si une formule forcerait un recalcul à chaque passe (appels tels que NOW, RAND, TODAY, OFFSET, INDIRECT, ou une référence non résoluble)AuditOverlayWrite stocke une valeur de remplacement pour une cellule (index de feuille en base un, ligne et colonne en base zéro conformément à la convention du moteur de calcul), AuditOverlayRead et AuditOverlayHash l'interrogent, et AuditOverlayClear vide la couche. Les valeurs superposées sont renvoyées par les accesseurs de valeur de cellule normaux, si bien que le recalcul et l'audit approfondi les observent sans muter les cellules de la feuille de calcul ; vider la surcouche restaure les valeurs stockéesÉtat des formules de table et de l'IME
property TXLSXTable.ColumnCalculatedFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TXLSXTable.ColumnTotalsFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TDataValidation.ImeMode: TXLSDataValidationImeMode;
property TXLSXDataValidation.ImeModeKind: TXLSDataValidationImeMode;
SaveExternalLinkValues sur False omet les enregistrements classiques XCT et CRN ou la sous-arborescence sheetDataSet du classeur externe XLSX, tout en conservant les cibles de liens, les noms de feuilles, les noms définis externes, les relations, les références de formules, le XML inconnu et le cache en mémoire ; restaurer la propriété sur True sur le même classeur permet de sérialiser à nouveau ce cache conservé
Inspection et suppression des volets de tâches des compléments web
function IXLSWorkbook.HasWebAddinTaskPanes: Boolean;
function IXLSWorkbook.WebAddinTaskPaneCount: Integer;
function IXLSWorkbook.RemoveWebAddinTaskPanes: Integer;
function TXLSXWorkbook.HasWebAddinTaskPanes: Boolean;
function TXLSXWorkbook.WebAddinTaskPaneCount: Integer;
function TXLSXWorkbook.RemoveWebAddinTaskPanes: Integer;
1303 et lèvent une exception avant toute mutation, tandis que XLS classique et ODS renvoient False, 0et -1 sans balayage du package
Politique d'affichage des objets du classeur
TXLSObjectDisplayMode = (xlsodmShowAll, xlsodmShowPlaceholders,
xlsodmHideAll);
property IXLSWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSXWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSPaginationModel.ExportObjectPlaceholders: Boolean;
property TXLSPDFExport.ExportObjectPlaceholders: Boolean;
property TXLSSvgExport.ExportObjectPlaceholders: Boolean;
property TXLSPageImageExporter.ExportObjectPlaceholders: Boolean;
property TXLSPrintDocument.ExportObjectPlaceholders: Boolean;
property TXLSXHtmlExportOptions.ExportObjectPlaceholders: Boolean;
workbookPr.showObjects; les valeurs manquantes valent xlsodmShowAllpar défaut, les payloads Classic réservés intacts et les jetons XLSX non pris en charge restent sans perte, et les assignations explicites n'émettent que des valeurs canoniques
ExportObjectPlaceholders demande la même politique à faible coût sans décoder les payloads d'images ni construire les scènes de graphiques
xlsodmHideAll empêche la collecte des dessins et l'expansion de plages pilotée par les objets avant le début du rendu ; la conversion de classeurs transporte les trois états, ODS écrit des dessins complets pour le mode placeholders et omet la sortie de dessins et de médias pour le mode hide-all, et les arrière-plans de feuilles de calcul restent indépendants
Valeurs d'étalonnage de rendu et instantanés
TXLSRenderCalibration = record
WidthCorrection: Double;
HeightCorrection: Double;
LineSpacing: Double;
CellMarginFactor: Double;
ScreenScaling: Integer;
MeasurementDpi: Integer;
end;
function XLSDefaultRenderCalibration: TXLSRenderCalibration;
function XLSValidateRenderCalibration(const AValue: TXLSRenderCalibration;
out AInvalidField: TXLSRenderCalibrationField): Boolean;
1, 1, 1, 1, 100et 96; les corrections de largeur et de hauteur doivent être supérieures à zéro et inférieures à deux, l'interlignage est borné à (0, 4], les marges de cellules à [0, 4], le facteur d'échelle écran à [100, 500] pour cent, et les DPI de mesure à [36, 2400]RenderCalibration, CaptureRenderCalibrationet ResetRenderCalibration ; l'assignation d'enregistrements entiers valide avant mutation, et chaque capture renvoie un instantané de valeur indépendant et immuable par convention pour une opération de rendu
Géométrie de rendu et mesure des polices
TXLSRenderGeometryBackend = (xlsrgbAutoFit, xlsrgbPagination, xlsrgbPdf,
xlsrgbSvg, xlsrgbBitmap, xlsrgbPrintPreview, xlsrgbViewer, xlsrgbHtml);
TXLSRenderFont = record
Name: WideString;
Size: Double;
Styles: TXLSRenderFontStyles;
Charset: Byte;
end;
function CreateXLSRenderGeometry(
const ACalibration: TXLSRenderCalibration;
AWorkbookGeneration: UInt64;
ABackend: TXLSRenderGeometryBackend;
ACacheCapacity: Integer = 4096): IXLSRenderGeometry;
property TXLSHTMLExport.RenderGeometry: IXLSRenderGeometry;
property TXLSXHtmlExportSession.RenderGeometry: IXLSRenderGeometry;
IXLSRenderGeometry possède un étalonnage immuable, une génération de classeur, une identité de backend, un service de mesure et un cache de métriques local à l'opération et borné ; CreateXLSRenderGeometry utilise GDI, tandis que CreateXLSPortableCairoRenderGeometry de lxPortableCairo utilise des octets de polices explicites avec FreeType/HarfBuzz sur Linux ou macOS natifs ; MeasureText renvoie la largeur en pixels, la hauteur, la hauteur de ligne, l'ascendante, la descendante et le nombre de lignes tandis que MaximumDigitWidthPixels, ColumnWidthToPixels, PixelsToColumnWidth, PointsToPixels, PixelsToPointset UsableCellWidthPixels fournissent les conversions de géométrie partagées
MarkSheet en deux phases, tandis que TXLSPaginationModel.Build capture un service pour le RenderBackendsélectionné ; les points d'entrée PDF, SVG, bitmap, aperçu avant impression, visionneuse de classeur et HTML sélectionnent leur propre backend avant la sortie, la modification de l'étalonnage du classeur ne peut pas muter un instantané existant, et la sortie n'écrit pas les dimensions de la feuille de calcul
xlsrgbHtml frais, tandis qu'une TXLSXHtmlExportSession incrémentielle capture une fois dans BeginExport et réutilise cet instantané pour toutes les feuilles ; les deux exportateurs exposent le service conservé via RenderGeometry pour l'étalonnage et les diagnostics de cache
IXLSRenderGeometry — WorkbookGeneration, CacheCapacityet CacheEntryCount — indiquent la génération liée et le remplissage du cache à des fins de diagnostic, et ImplicitWidthMaximumDigitWidthPixels renvoie la mesure de largeur de chiffre qui sous-tend l'émulation des largeurs de colonnes implicites
MeasureText remplit un enregistrement TXLSRenderTextMetrics (largeur en pixels, hauteur, hauteur de ligne, ascendante, descendante et nombre de lignes) à partir d'un TXLSRenderFont dont le membre Styles est un ensemble de flags TXLSRenderFontStyle (gras, italique, souligné, barré)
Importation, génération de code, comparaison et surveillance
TXLSHTMLImport | LoadFromHTML importent le contenu de tableaux HTML depuis un flux ou un fichier vers une feuille de calcul, avec des coordonnées de départ, une sélection de tableaux et un séparateur décimal facultatifs |
TXLSCodeGen | Language (type TlxCodeGenLanguage: lcgDelphi ou lcgCppBuilder) sélectionne le dialecte source des instructions générées, GenerateToList écrit le code de classeur généré dans une liste de chaînes, et TlxCodeGenOptions élargit la sortie avec les fusions, les largeurs de colonnes ou les formats numériques (cgoMerges, cgoColumnWidths, cgoNumberFormats; feuilles et cellules sont toujours émises) |
TXLSXWorkbookCompare | Compare compare les cellules stockées typées, le texte de formules, la présence de feuilles et les fusions ; Options ajoute les caches de formules, les styles de base de cellules et la géométrie de lignes ou colonnes, SetNumericTolerance configure l'égalité numérique, et Count, Diffet Report exposent les résultats ordonnés ; voir la comparaison de classeurs |
TXLSFileMonitor | IntervalMs sélectionne l'intervalle d'interrogation et SynchronizeEvent sélectionne la livraison synchronisée des callbacks ; un gestionnaire OnFileChanged peut désactiver ou détruire le moniteur, ou changer FileName pour surveiller un autre fichier |
TXLSCSVLoader and TXLSCSVSaver | Le loader analyse du texte délimité en une grille de Variants en mémoire — ParseFile et ParseStream remplissent la grille, CellValue, RowCountet ColCount la relisent — avec un séparateur (ValueSeparator) et un encodage (TXLSCsvEncoding: ANSI système, UTF-16, UTF-8) autodétectés et une promotion de types facultative contrôlée par DetectTypes et des entrées ColumnTypes par colonne (TXLSCsvColumnType: auto, texte, nombre, date, booléen, skip) ; SkipRows, AutoTrim, LocaleTolerantNumberset FieldWidths affinent la gestion des largeurs fixes et des paramètres régionaux. TXLSCSVSaver.SaveAs réécrit la grille avec les guillemets RFC 4180, et QuoteAllStrings force les guillemets ; TXLSTSVSaver dérive du saver pour une sortie séparée par des tabulations |
Comparaison de classeurs
TXLSXWorkbookCompare de lxCompare compare deux instances TXLSXWorkbook sans recalculer de formules ni modifier l'un ou l'autre classeur ; les feuilles sont appariées par nom insensible à la casse, et un simple changement d'ordre des feuilles ne produit pas de différence
La valeur Options par défaut est vide et les deux tolérances valent zéro par défaut ; la comparaison par défaut signale les feuilles ajoutées ou retirées, les cellules stockées ajoutées ou retirées, les valeurs littérales typées changées, le texte de formules changé, et les plages fusionnées ajoutées ou retirées
La comparaison littérale distingue nombres, texte, booléens, dates, erreurs et vides : le nombre 1 diffère du texte '1', un booléen diffère de son orthographe textuelle, les dates conservent leur propre type, et les erreurs se comparent par leur code d'erreur stocké ; les types de stockage numériques de valeurs égales se comparent comme égales, tandis que des valeurs Int64 distinctes restent distinctes pendant la comparaison exacte
lcoFormulaCachedResults | Pour les cellules de texte de formule correspondant, compare le résultat en cache existant et distingue un cache manquant ou invalidé d'un cache disponible ; les caches chargés et calculés de même valeur typée se comparent comme égaux |
lcoCellStyles | Compare les styles de base résolus aux coordonnées de cellules stockées correspondantes, y compris polices, remplissages, dégradés, bordures, alignement, formats de nombre et protection de cellule ; un ordre d'insertion du pool de styles sans rapport ne crée pas de différences, et les couleurs de thème se résolvent contre le thème courant de chaque classeur |
lcoAxisGeometry | Compare les hauteurs de lignes et largeurs de colonnes effectives, les indicateurs de masquage, les niveaux de plan, les indicateurs de repli et les défauts de feuille ; une taille explicite égale au défaut effectif se compare comme égale à une taille implicite |
lcoDefinedNames | Compare les noms à portée classeur et feuille, leurs définitions de formules, la visibilité, les commentaires et les indicateurs de macro ; la portée suit les noms de feuilles, et l'ordre d'insertion ne crée pas de différences |
lcoDataValidations | Compare les définitions de validation dans l'ordre stocké, y compris les plages cibles normalisées, les formules, les opérateurs, les invites, les messages d'erreur et les indicateurs de contrôle ; changer l'ordre des plages cibles au sein d'une définition ne crée pas de différence |
lcoConditionalFormats | Compare les définitions de mise en forme conditionnelle dans l'ordre stocké, y compris la priorité effective, le comportement stop-if-true, les plages cibles, les formules, les styles différentiels, et les réglages pris en charge d'échelles de couleurs, barres de données et jeux d'icônes ; les identifiants de pool de styles et de palette indexée se résolvent vers leurs valeurs sémantiques |
lcoTables | Apparie les tables par nom et compare plages, en-têtes, totaux, réglages de styles, commentaires, noms de colonnes, étiquettes, formules, indicateurs de tableau, noms uniques, noms de connexions, critères de filtre et conditions de tri ; les IDs de tables, IDs de colonnes et l'ordre d'insertion ne créent pas de différences, tandis que les IDs différentiels de filtres de couleur et de tri se résolvent vers l'apparence |
lcoDrawings | Compare les définitions typées de dessins dans l'ordre de dessin, en conservant l'ordre des enfants de groupes et l'ordre des groupes de tracé de graphiques ; les définitions canoniques prises en charge couvrent images, zones de texte, graphiques, groupes, vues de Slicers typées complètes et vues de Timelines typées, avec des nœuds de dessin opaques ou non pris en charge levant EXLSSemanticSnapshot |
lcoBlankStyleRegions | Compare les styles de base résolus aux coordonnées sans cellule stockée d'aucun côté, y compris les défauts de feuille et les superpositions de styles virtuels ; des subdivisions de rectangles équivalentes se comparent comme égales, et des changements adjacents égaux fusionnent en rectangles sans matérialiser de cellules |
lcoRichTextRuns | Compare les polices effectives et le texte des segments aux cellules de texte stockées correspondantes, hérite de la police de base pour les propriétés de segments omises, ignore les segments vides, et fusionne les segments adjacents de polices effectives égales ; le texte simple correspond à un segment de texte enrichi de police par défaut équivalent |
lcoPivotTables | Apparie les définitions typées de tableaux croisés dynamiques par nom et compare les liaisons de sources, la disposition, les champs, les membres de vues ordonnés, les agrégations de données, les filtres, les références de groupement, les définitions calculées, les styles et les indicateurs de matérialisation natifs ; les IDs de caches et de membres partagés se résolvent vers les identités de sources et les valeurs typées |
lcoPivotCaches | Apparie les définitions typées locales de PivotCaches par identité de source et compare les métadonnées de rafraîchissement, les métadonnées de champs, les étiquettes et plages groupés, les domaines de membres partagés non ordonnés, et les valeurs typées d'enregistrements ordonnés ; les membres numériques, texte, booléens, dates, erreurs et vides restent distincts, les dates conservent la précision binary64, et les IDs de caches et l'ordre d'emplacements de membres partagés ne créent pas de différences |
lcoSlicerState | Apparie les vues de Slicers nommées et les caches, y compris les liaisons de colonnes de tables ou de tableaux croisés dynamiques non-OLAP, les noms de tableaux croisés dynamiques connectés, les sélections typées de membres, les réglages de cross-filter et de tri, la légende, la position de défilement, la disposition de colonnes, les dimensions, le style, les indicateurs de verrou et de légende, et la géométrie d'ancrage ; les liaisons résolvent les IDs de tables, de colonnes, de feuilles et de caches |
lcoTimelineState | Apparie les vues typées de Timelines nommées et les caches locaux non-OLAP, y compris les liaisons de champs sources et de tableaux croisés dynamiques connectés, la sélection de dates active, la légende, le niveau et les bornes de feuille ; les sélections inactives omettent les extrémités de dates inutilisées |
Options a le type TlxCompareOptions, un ensemble de TlxCompareOption ; activer une option ajoute ses différences à la comparaison par défaut
SetFeatureLimits(MaxBytes, MaxItems) valide les deux limites positives avant de changer l'un ou l'autre réglage ; MaxFeatureBytes vaut 64 Mio par défaut et MaxFeatureItems 1 000 000 par défaut, et les setters individuels conservent la même validation atomique
Les budgets de fonctionnalités couvrent les octets canoniques détachés agrégés et les entrées comptées des deux classeurs, y compris segments de texte enrichi, nœuds XML de filtres, champs de tableaux croisés dynamiques, membres de domaines et valeurs d'enregistrements, et connexions de Slicers ou Timelines ; les lecteurs vérifient les comptages et les entrées de texte importantes avant de construire le XML natif, appliquent des flux de sortie bornés, et lèvent EXLSXSemanticBudget quand une limite est dépassée
SetNumericTolerance(AbsoluteTolerance, RelativeTolerance) valide les deux arguments avant de changer l'un ou l'autre réglage ; les deux doivent être finis et non négatifs, et les setters individuels AbsoluteTolerance et RelativeTolerance utilisent la même validation
Les littéraux numériques et les valeurs de caches numériques se comparent comme égales quand leur différence absolue est au plus AbsoluteTolerance ou leur différence relative à la plus grande valeur absolue est au plus RelativeTolerance ; un seuil de zéro conserve l'égalité exacte, le calcul relatif évite le débordement pour des valeurs opposées extrêmes, et la tolérance ne convertit pas le texte et ne s'applique ni aux dates, ni aux styles, ni à la géométrie
LeftName et RightName définissent des noms d'affichage facultatifs utilisés par les lignes de Report, avec left et right par défaut ; les noms n'affectent que le rapport, pas l'appariement de feuilles ni la comparaison
Comparer := TXLSXWorkbookCompare.Create;
try
Comparer.Options := [lcoFormulaCachedResults, lcoCellStyles,
lcoAxisGeometry];
Comparer.SetNumericTolerance(0.001, 0.000001);
DifferenceCount := Comparer.Compare(LeftWorkbook, RightWorkbook);
for I := 0 to DifferenceCount - 1 do
begin
Entry := Comparer.Diff(I);
ReportLines.Add(Entry.Describe);
end;
finally
Comparer.Free;
end;
Compare renvoie le nombre de différences, Count relit ce nombre ensuite, et Diff(Index) utilise l'indexation en base zéro pour renvoyer un TlxCompareDiff détenu par le comparateur ; conservez le comparateur pendant la lecture de ses entrées, et récupérez à nouveau les entrées après une autre comparaison réussie
Chaque entrée fournit Kind, Sheet, Row et Col en base 1 quand applicables, Ref, LeftText, RightText, et des valeurs typées LeftKind / RightKind ; TlxCompareValueKind contient lcvNone, lcvBlank, lcvNumber, lcvText, lcvBoolean, lcvDateTime, lcvErroret lcvFormula, avec lcvNone utilisé pour un côté absent ou une différence hors valeur
TlxCompareKind conserve lckSheetAdded, lckSheetRemoved, lckCellAdded, lckCellRemoved, lckValueChanged, lckFormulaChanged, lckMergeAddedet lckMergeRemoved, et ajoute lckFormulaCacheChanged, lckStyleChanged, lckRowGeometryChangedet lckColumnGeometryChanged
Les différences de styles transportent des empreintes canoniques stables de styles dans LeftText et RightText ; les différences de géométrie transportent l'état comparé de taille, masquage, plan et repli, avec Ref identifiant l'intervalle d'axe contigu affecté, Row fixé à sa première ligne et Col à zéro pour les lignes, ou Col fixé à sa première colonne et Row à zéro pour les colonnes
Les différences de fonctionnalités utilisent lckDefinedNameChanged, lckDataValidationChanged, lckConditionalFormatChanged, lckTableChanged, lckDrawingChanged, lckPivotTableChanged, lckPivotCacheChanged, lckSlicerChangedou lckTimelineChanged ; Change vaut lccChanged, lccAddedou lccRemoved, et chaque côté présent transporte son empreinte canonique de définition tandis qu'un côté absent transporte une chaîne vide
lckRichTextChanged identifie une définition de segment changée à sa coordonnée de cellule et transporte des empreintes canoniques de segments dans LeftText et RightText ; la tolérance numérique s'applique aux littéraux de cellules et aux caches de formules, tandis que les définitions typées de fonctionnalités se comparent exactement
Les références de fonctionnalités identifient des noms à portée ou des noms de tables, ou utilisent des positions de séquence en base 1 pour les définitions de validation, de mise en forme conditionnelle et de dessins ; insérer ou déplacer une fonctionnalité ordonnée peut changer plusieurs positions, tandis que les entrées de noms au niveau classeur ont un Sheet vide
lckBlankStyleRegionChanged identifie un rectangle vide changé via Row, Col, LastRow et LastCol inclusifs, et son Ref A1 ; les coordonnées stockées sont traitées par la comparaison ordinaire de cellules et lcoCellStyles, donc activez les deux options de styles pour inspecter ensemble les cellules stockées et les zones vides
Describe formate une entrée, tandis que Report(List) ajoute les entrées formatées à un TStrings détenu par l'appelant ; un changement de valeur typée inclut des étiquettes de types quand les types diffèrent, et les résultats se trient par nom de feuille, ligne, colonne, genre de différence et référence plutôt que par l'ordre d'insertion des cellules
La comparaison détient des baux de lecture, parcourt les cellules stockées via des instantanés détachés de curseurs, et retient le stockage packé ; la géométrie partitionne les frontières de métadonnées stockées et les étendues compactes de lignes répétées, tandis que la comparaison de styles vides balaie les frontières de rectangles actifs et de cellules stockées sans scanner une grille rectangulaire d'un million de lignes ; le travail croît avec les fonctionnalités stockées, les intersections de régions et les différences signalées
Une comparaison en échec préserve le résultat réussi précédent ; une affectation de tolérance invalide préserve aussi les réglages et le résultat existants, tandis que passer un classeur nil efface le résultat et renvoie zéro
Cette comparaison couvre le contenu de cellules stockées de la façade XLSX et les définitions typées de fonctionnalités sélectionnées ; l'orthographe des formules de noms, validations, mises en forme conditionnelles, tables et graphiques se normalise via l'analyseur sémantique de formules, tandis que les formules calculées de tableaux croisés dynamiques conservent leur texte de définition stocké
Les filtres de tables acceptent les formes prises en charge de filtres personnalisés, de listes de valeurs, de groupes de dates, de couleurs, d'icônes, dynamiques et de top-count, et les conditions de tri ; les colonnes de filtres indépendantes et les entrées d'ensembles de valeurs normalisent leur ordre, les défauts booléens et les orthographes numériques se normalisent, et l'ordre des conditions de tri reste significatif
La comparaison typée de tableaux croisés dynamiques, Slicers et Timelines résout les sources de feuilles locales prises en charge et les liaisons non-OLAP sans rafraîchir ni évaluer la disponibilité ; les indications natives de disponibilité des Slicers sont des métadonnées d'affichage dérivées, tandis que les sélections de membres et les métadonnées natives reconnues de tri sont comparées
Les propriétés natives opaques de dessins, les modèles de tableaux croisés dynamiques binaires incomplets, les sources de tableaux croisés dynamiques externes ou OLAP, les enregistrements supplémentaires bruts de tableaux croisés dynamiques et le XML d'extensions, le XML de filtres inconnu, et les attributs ou enfants d'extensions de Slicers ou Timelines non modélisés lèvent EXLSSemanticSnapshot ; la préservation de ces données n'implique pas d'équivalence sémantique
Les fonctionnalités sélectionnées importées de tableaux croisés dynamiques et de PivotCaches valident aussi le XML natif préservé avant de comparer la projection typée, y compris les métadonnées de champs imbriqués et les enregistrements de caches ; les espaces de noms, attributs, enfants et charges d'extensions inconnus échouent explicitement dans les mêmes limites coopératives de fonctionnalités, tandis que les liaisons de caches de Slicers modélisées restent prises en charge
TSimpleDomNode.RawName expose le QName d'élément d'origine à côté du Name normalisé par le lecteur, permettant une inspection sensible aux espaces de noms sans changer la correspondance de noms existante de l'analyseur
Les réglages de classeur et les métadonnées opaques de package restent hors de la comparaison ; la comparaison de styles de base n'évalue pas l'apparence des mises en forme conditionnelles ou des styles de tables, et la comparaison de dessins préserve les frontières d'images, de zones de texte, de graphiques et de groupes ordonnés prises en charge par l'instantané sémantique
Propriétés effectives du texte enrichi
TMsoFbtOpt.StoredPids renvoie les identifiants de propriétés OfficeArt stockés en ordre trié, tandis que TMsoFbtSp.PersistentFlags expose les indicateurs natifs de formes sans allouer de propriétés ni d'ancres
TMsoShapeContainer.HasPreservedObjectData identifie les octets de queues OBJ retenus ; HasOrdinaryEmbeddedPictureObjectData vérifie que les queues d'images ne contiennent que des enregistrements reconnus de formats de presse-papiers et d'indicateurs d'image à zéro, et rejette les enregistrements liés ou inconnus sans copier la charge
TMSOShapeTextBox.HasValidTextRuns vérifie les frontières de segments TXO stockés et les champs réservés sans créer de segments ; TMsoDrawing.HasUnmodeledAppearance identifie les données natives de dessins sautées par l'analyseur typé, permettant à la capture de rejeter explicitement une apparence non résolue
TXLSXRichTextRun.BoldSet, ItalicSet, StrikethroughSet, UnderlineSet, VertAlignSet et ColorSet distinguent les propriétés de police héritées des surcharges explicites, y compris les indicateurs false, none, les couleurs de baseline et automatiques ; les setters marquent la propriété explicite même quand sa valeur égale le défaut initial du nouveau segment
TXLSXRichText.HasUnsupportedAppearance signale les propriétés riches natives que le modèle typé de segments ne peut pas représenter ; la capture portable et la comparaison effective de texte enrichi rejettent explicitement de tels segments, tandis que les propriétés de segments partagés/en ligne et les blancs pris en charge conservent leur sémantique importée
La comparaison effective de texte enrichi applique les surcharges false explicites avant de fusionner les segments adjacents égaux ; les propriétés héritées et explicitement effacées restent distinctes pendant la déduplication de chaînes partagées et les aller-retours XML pris en charge
TXMLReader.ResolveNamespaceUri(Prefix, Uri) résout la liaison d'espace de noms courante en portée sans changer la position du lecteur, en renvoyant false quand aucune liaison n'existe ; un préfixe vide demande l'espace de noms par défaut, et les QNames bruts restent disponibles pour l'inspection sensible aux espaces de noms
Les enregistrements immuables rich/scene, l'extension de source de capture et le contrat de transfert HXRSNP02 sont décrits dans la sortie headless portable
Inspection détachée de styles et d'axes
TXLSXWorksheet.ReadSemanticCellStyle(Row, Col) renvoie un TXLSSemanticCellStyle détaché pour des coordonnées valides en base 1, en résolvant les styles stockés et packés, les défauts de feuille, les superpositions de styles applicables, les formats de dates implicites, les couleurs indexées et les couleurs de thème sans matérialiser de cellules ni changer les pools de styles ; l'appel public acquiert un bail de lecture et exclut les règles de mise en forme conditionnelle et de styles de tables
TXLSXWorksheet.GetStoredAxisSpans(IsRow) renvoie TXLSXAxisSpans, un tableau d'enregistrements TXLSXAxisSpan avec FirstIndex et LastIndex inclusifs en base 1 ; il signale les empreintes de métadonnées de taille, masquage, plan et repli, préserve les étendues compactes de hauteurs de lignes répétées, et laisse le défaut effectif de la feuille disponible via ses propriétés ordinaires
Les étendues renvoyées décrivent des empreintes de métadonnées stockées plutôt qu'une partition normalisée disjointe ; les applications comparant deux axes peuvent combiner leurs frontières premières et dernières, puis inspecter l'état effectif une fois par intervalle résultant
TXLSXWorksheet.GetStoredStyleRegions renvoie des TXLSXStyleRegions détachées contenant les frontières inclusives FirstRow, FirstCol, LastRowet LastCol des empreintes compactes de mise en forme virtuelle ; ces empreintes peuvent se chevaucher, et les appelants lisent leur apparence effective avec ReadSemanticCellStyle
TXLSXWorkbook.ReadSemanticFeatures(Kind, Sheet, MaxBytes, MaxItems) renvoie des entrées détachées TXLSXSemanticFeatures avec une Key stable, des octets canoniques de Definition, et un ItemCount compté ; les limites positives facultatives valent 64 Mio et 1 000 000 d'entrées par défaut
TXLSXSemanticFeatureKind contient xlsxSemanticDefinedNames, xlsxSemanticDataValidations, xlsxSemanticConditionalFormats, xlsxSemanticTables, xlsxSemanticDrawings, xlsxSemanticPivotTables, xlsxSemanticPivotCaches, xlsxSemanticSlicers, xlsxSemanticSlicerCaches, xlsxSemanticTimelineset xlsxSemanticTimelineCaches
Les noms définis et les trois genres de caches utilisent une portée à l'échelle du classeur et permettent une feuille nil ; les autres genres exigent une feuille appartenant au classeur, les règles et dessins conservent leur séquence stockée, et les tableaux et tampons renvoyés sont des copies détenues par l'appelant ; ces lecteurs acquièrent des baux de lecture et héritent de la couverture typée et du comportement explicite de données non prises en charge décrits ci-dessus
TXLSXWorksheet.ReadSemanticRichText(Row, Col, IncludePlainText, MaxBytes, MaxItems, ConsumedItems) renvoie les octets canoniques détachés de segments pour des coordonnées en base 1, ou un tampon vide quand aucun texte enrichi n'existe et que IncludePlainText est false ; le ConsumedItems: PInteger facultatif reçoit le nombre de segments capturés, et la capture de texte simple retient le stockage packé
TXLSPivotCacheField.GroupItemTypes[Index] expose le genre typé correspondant à GroupItemLabels[Index] et rejette un index hors du domaine d'étiquettes groupées stocké
Métadonnées de formules et callbacks de requêtes de tableaux croisés dynamiques
TXLSGetCellFormulaText et TXLSCalculator.OnGetCellFormulaText lisent le texte d'expression stocké avec un SheetIndex en base 1 et des Row/Col en base zéro, en renvoyant lxOk ou un code d'erreur typé et en respectant la protection de masquage des formules ; TXLSGetPivotTable et OnGetPivotTable localisent une table empruntée avec un SheetIndex en base 1 et des coordonnées de plage en base zéro
Les moteurs de classeurs câblent ces callbacks facultatifs dans les contextes de calcul normal, en lecture seule et isolé ; les callbacks ne recalculent pas les cibles, ne rafraîchissent pas les sources de tableaux croisés dynamiques et ne transfèrent pas de propriété
TXLSPivotDataConstraint stocke un FieldName et un Item typé, avec TXLSPivotDataConstraints collectant les paires champ/élément ; TXLSPivotTable.GetDataValue interroge un agrégat visible pris en charge depuis un instantané détaché de table/cache et IntersectsQueryRange utilise des bornes de feuille en base 1, cellules de filtres de rapport modélisées comprises
TlxPivotQueryBudget reçoit synchroniquement des estimations de travail et de mémoire et renvoie si l'évaluation peut continuer ; EXLSPivotQueryBudget et EXLSPivotQueryUnsupported distinguent les limites épuisées des modèles de caches ou d'agrégats non pris en charge
TXLSPivotCache.QueryModelIsComplete enregistre la préparation décodée des requêtes indépendamment de la complétude de la relecture brute BIFF ; QueryRecordsValid expose la validité des enregistrements importés et SetQueryRecordValidity applique la précédence du lecteur de format sans rafraîchir les enregistrements
Octets de pages de codes explicites
| Membre | Contrat |
|---|---|
XlsEncodeCodePage(Text, CodePage, MaxBytes = -1) | Renvoie un RawByteString avec les octets exacts dans une page explicite non nulle orientée octets, préserve les null incorporés, vérifie l'identité d'aller-retour Unicode, et lève EConvertError pour du texte non représentable ; un MaxBytes non négatif garde le plus long préfixe de caractères complets qui tient, tandis que -1 laisse la longueur non bornée ; la validation couvre le texte d'origine avant troncature |
XlsDecodeCodePage(Bytes, CodePage) | Renvoie un WideString depuis l'encodage d'octets explicite et préserve les null incorporés ; les séquences d'octets malformées suivent le comportement du décodeur installé ; la page 0 et la page UTF-16 1200 sont rejetées parce que cette API n'infère pas de locale ANSI ni ne gère un flux d'octets UTF-16 |
TXLSBlob.GetCompressedUnicodeString(Index, Count) | Renvoie les unités de code exactes BIFF8 Unicode compressé de U+0000 à U+00FF, préserve les null incorporés, valide la plage d'octets demandée, et n'interprète pas ces octets via une page de codes |
TXLSBlob.AddRawString | Ajoute des octets encodés exacts sans conversion de page de codes AnsiString et met à jour DataLength ; une entrée vide n'ajoute aucun octet |
TXLSCalculator.CodePage, TXLSFormula.FCodePage | Sélectionnent l'encodage d'octets explicite des formules historiques, avec CP1252 par défaut ; le classeur classique propriétaire synchronise son calculateur à l'initialisation ou quand SetCodePage est appelé |
TXLSFontList.GetFont, TXLSNumFormatList.GetNumFormatBlob, TXLSStyles.GetStyleBlob | L'argument CodePage facultatif vaut 1252 par défaut et encode du texte BIFF5 ; la sortie BIFF8 reste Unicode |
TMsoDrawing.StoreNotes | L'argument CodePage facultatif vaut 1252 par défaut et encode le texte de commentaires pré-Unicode ; la limite existante de taille d'enregistrement de commentaires ordinaires BIFF5 reste ; cela n'ajoute pas d'auteur, de texte enrichi ni de champs de géométrie absents de ce format d'enregistrement |
TXLSCustomName.SetSourceData | Les arguments facultatifs FileFormat et CodePage identifient les octets NAME bruts importés et valent xlExcel97 et 1252 par défaut ; les enregistrements bruts ne sont réutilisés que lorsque leur format et leur encodage historique correspondent à la sortie demandée |
TXLSFormulatArrayItem.GetDataSize, TXLSFormulatArray.GetDataSize, TXLSFormulatArray.GetData, TXLSFormulatArrays.GetDataSize, TXLSFormulatArrays.GetData, TXLSCompiledFormula.GetExternalData | L'argument ACodePage facultatif vaut 1252 par défaut ; la taille et la sortie des tableaux de chaînes historiques utilisent le même compte d'octets encodés, tandis que les chaînes BIFF8 restent Unicode |
Passez le RawByteString renvoyé directement à AddRawString ou à une opération de flux orientée octets ; le convertir en AnsiString par défaut peut recoder ses octets sur les systèmes FPC natifs
Noms définis classiques et blocs de formules matricielles
TXLSCustomName deferred compilation | ClearDefinition libère l'AST RefersTo compilé tout en conservant la chaîne de définition stockée et tout octet NAME brut importé, Compile reconstruit l'AST depuis la définition stockée et signale le succès, et GetCompiledFormula recompile automatiquement, si bien qu'un nom effacé se résout à sa prochaine lecture ; PeekCompiledFormula renvoie l'AST courant sans déclencher cette recompilation, et StoredDefinition expose la source de définition non analysée |
TXLSCustomName identity and flags | StoreIndex expose la position de stockage du nom dans sa collection, NameID son identité numérique unique au classeur telle qu'utilisée par le moteur de calcul, et IsHidden et IsMacro lisent et écrivent les indicateurs hidden et macro de l'enregistrement NAME BIFF |
TXLSFormulatArray.RowsCount, ColsCount | Indiquent les étendues de lignes et de colonnes du bloc de formules matricielles analysé ; les deux démarrent à un et bornent le domaine d'éléments par cellule transporté par les méthodes d'émission |
Pools classiques de polices, de formats et de styles
TXLSFontList stored font attributes | Les propriétés indexées reflètent la clé de police stockée à un index de liste en base zéro : Name, Size, ColorIndex, Bold, Italic, Strikethroughet Underline rejoignent OutLineFont, Shadow, SubScript, SuperScript, Familyet CharSet pour une inspection en lecture seule |
TXLSNumFormatList.AddValue, FmtExists | AddValue enregistre une chaîne de format et renvoie son index, mappant les orthographes de formats intégrés vers leurs ids canoniques et marquant les formats de date et d'heure ; FmtExists indique si une chaîne de format personnalisée est déjà enregistrée |
TXLSNumFormatList.IsDateFormat, IsDateFormatValue | IsDateFormat indique si le format stocké à un index est marqué comme format de date ou d'heure, tandis que IsDateFormatValue teste directement une chaîne de format pour des jetons de date et d'heure |
TXLSStyles.AddStyle, AddBuiltinStyle | AddStyle enregistre un style de cellule personnalisé nommé lié à un index d'enregistrement XF, et AddBuiltinStyle enregistre un style de cellule intégré par son id intégré avec le niveau de plan utilisé par les styles de niveaux de lignes et colonnes |
TXLSStyles.BuiltinStyleName | Fonction de classe renvoyant le nom d'affichage canonique de style de cellule intégré Excel pour les ids intégrés de 0 à 53 ; les ids hors plage renvoient un nom vide afin que les écrivains retombent sur la forme brute d'octets intégrés |
Assistants de package et de stockage binaire
TXLSXOpaquePackage | LoadWorkbookXmlMetadata capture l'état XML au niveau du classeur, MarkAllPartsClean réinitialise les indicateurs de modification, et WorkbookExtLstXml plus WorkbookRootAttributesXml exposent les fragments XML de classeur préservés ; IsDiscardedPart indique si un nom de partie a été supprimé par une opération de suppression telle que le nettoyage des compléments web |
TXLSFileStorage | Load, LoadFolder, Writeet WriteFolder transfèrent le contenu de fichiers composés ; Child et Count énumèrent les entrées enfants, chacune étant un TXLSFileItem — un nœud de stockage nommé dont la sous-classe TXLSFileStream transporte les octets stockés sous forme de TXLSBlob avec DataSize indiquant la longueur du payload |
TXLSBlob | Add ajoute un autre blob, tandis que AddByte, AddWord, AddLong, AddDouble, AddStringet AddWideString ajoutent des valeurs typées ; CopyData, CopyMem, FillByte, Write, Clear, Resetet Dump gèrent le contenu ; Buff et DataLength exposent le stockage |
TXLSBlobList | Append, AppendList, CopyDataet Write combinent ou émettent des entrées ; Entries et TotalSize exposent l'état de la liste |
TXLSWideStringBuilder | AddString ajoute du texte et Length indique le nombre de caractères accumulés |
Ajouts de dessin et de visionneuse de classeur
TXLSFillFormat | PictureFill configure un remplissage de forme basé sur une image, tandis que FillType sélectionne le type de remplissage (uni, dégradé, image ou texture prédéfinie) que l'enregistreur émet |
TXLSShapes | AddScrollBar et AddSpinner créent des contrôles de formulaire — les objets TXLSScrollBar et TXLSSpinner renvoyés exposent la géométrie du contrôle et la cellule liée, et le spinner ajoute les limites de pas Min, Maxet Inc — tandis que RegisterScrollBar et RegisterSpinner enregistrent des contrôles chargés depuis un classeur |
TXLSWorkbookViewer | CanUndo et CanRedo signalent la disponibilité de l'historique de transactions ; ClearSelectedRange, CopySelectedRange, PasteSelectedRangeet PasteText opèrent sur la plage sélectionnée, tandis que ReferencePickMode active la sélection interactive de références de cellules ou de plages |
TXLSWorkbookEditHistory | Le moteur de transactions de contenu headless de lxWorkbookViewer lie un classeur classique ou XLSX emprunté et fournit le préflight de protection de plages, la copie et le collage de texte Unicode, l'effacement de plages, et une transaction d'annulation/rétablissement par opération ; voir les transactions d'édition headless |
TXLSCellContentSnapshot | Les deux classes de feuilles exposent ReadCellContent(Row, Col) et RestoreCellContent(Snapshot) pour la capture et la restauration détachées de contenu natif à des coordonnées en base 1 dans la feuille d'origine ; la capture n'évalue pas de formules, ne crée pas de cellules absentes et ne matérialise pas le stockage packé, et la charge immuable NativeData préserve texte enrichi, caches de formules et style de cellule ; la restauration directe est une opération de bas niveau dont l'appelant doit valider la protection et les frontières structurelles |
Pagination, sortie d'images et impression
XLSValidateCachedChartSceneModel, XLSRecordCachedChartScene | Préflight les métadonnées de graphiques en cache sans résoudre de cellules et enregistre des primitives bornées de vecteurs et de texte pour un graphique détaché dans lxPortableChart, en renvoyant TXLSPortableSceneObjects et une comptabilisation d'éléments, d'octets et de texte ; les points d'entrée lxPagination conservent la même implémentation partagée pour les appelants Windows existants ; le sous-ensemble courant couvre les graphiques ordinaires à colonnes, barres, lignes, dispersion, secteurs, anneaux et aires à série unique avec un seul groupe de tracé primaire, et l'enregistrement exige des métadonnées natives validées, des points de cache finis strictement ordonnés et un modèle de graphique non attaché ; voir l'enregistrement de graphiques en cache |
TXLSGraphicsBackend | DrawTiledImage peint par mosaïques un arrière-plan de feuille de calcul sur toute la région de page écrêtée |
TXLSPaginationModel | CompactRangeMode, IncludeDrawings, IncludeGridlines, IncludeCellBorderset PaintPageBackground contrôlent le contenu des pages ; RenderDPI, RenderColorModeet RenderSession exposent la résolution de sortie, la gestion des couleurs et la session de rendu active |
TXLSCellImageExporter | Measure calcule les dimensions en pixels pour des plages classiques ou XLSX ; ImageFormat, JpegQuality, MaxPixels, MaxBytes, IncludeObjects, IncludeGridlines, IncludeCellBorders, BackgroundColor, TransparentBackground, BeforePaint, AfterPaintet PaginationModel configurent et observent le rendu |
TXLSPageImageExporter | BeforePaint, AfterPaint, MaxPixels, MaxBytes, BackgroundColoret TransparentBackground appliquent les mêmes hooks de peinture et limites de sécurité de sortie à l'export d'images paginé |
TXLSPrintDocument | PrintWorksheet, PrintWorkbooket PrintAllVisibleSheets envoient le contenu classique ou XLSX à l'imprimante VCL ; FirstPage, PrintRangeOnly, Collate, Copies, OnBeforeNewPageet OnAfterGeneratePage contrôlent le travail d'impression |
Modèles de graphiques classiques et objets graphiques de feuille de calcul
TXLSXChartSeries | LineVisible, LineColorRGBet LineWidthPoints décrivent le trait indépendant d'une série ; LineStyleSet, LineColorSetet LineWidthSet préservent les réglages explicites, et EffectiveLineVisible résout la convention historique de remplissage seul ; MarkerFillSet et MarkerBorderSet distinguent le noir explicite des couleurs de marqueurs automatiques, tandis que l'enregistrement portable de lignes et de dispersion prend en charge des diamètres de cercles de 2 à 72 points ; les setters de couleur et de largeur valident avant mutation et respectent les baux de lecture du classeur |
TXLSChartSeries | AddTrendline et AddErrorBars créent des annotations typées de série, tandis que TrendlineCount et ErrorBarCount indiquent la taille de leurs collections ; le champ MarkerSize existant conserve les twips BIFF bruts, tandis que le getter en lecture seule MarkerSizePoints renvoie cette valeur divisée par 20, tailles fractionnaires de points comprises |
TXLSChartAxis | HasAxcExtFlag teste un flag AXCEXT brut sans que les appelants aient à décoder le masque de bits |
TXLSChartModel | AxisGroupCount indique le nombre de groupes d'axes primaires et secondaires décodés du graphique |
TXLSCustomChart | AddAreaData ajoute un élément de zone pré-construit pour une reconnexion des formules à l'enregistrement et ApplyDateAxisModel applique un modèle d'axe de dates typé aux enregistrements bruts du graphique ; GetStoredRecordInfo lit un identifiant d'enregistrement en base zéro et un nombre d'octets sans allocation, tandis que ReadStoredRecord(Index, MaxBytes) vérifie la limite d'octets avant de renvoyer des octets détachés dans TXLSChartStoredRecord, sans évaluer de formules ni modifier de caches |
TXLSWorksheet | AddChartObject ancre un cadre de graphique sur la feuille de calcul et le connecte au builder de graphiques partagé |
TXLSXChartLayoutResolver | TryResolve résout un rectangle de mise en page avec validation de taille facultative et ResolveChart calcule les rectangles du graphique, du titre, de la légende, du tracé et des axes |
Modèle de décodage typé des graphiques
L'état décodé du graphique est exposé sous forme d'enregistrements et d'énumérations simples afin que le code d'inspection n'ait jamais à parcourir les enregistrements BIFF bruts : TXLSChartInfo porte le résumé décodé du graphique avec TXLSChartTypeFamily (cfBar, cfLine, cfPie, cfArea, cfScatter, cfRadar, cfDoughnut, cfSurface, cfBubble), chaque série signale un TXLSChartSeriesType, et TXLSChart3DState plus TXLSChart3DInfo décrivent les vues tridimensionnelles. TXLSChartAxisType (catCategory, catValue, catSeries, catDate) et TXLSChartLegendPosition classent les axes et les légendes, tandis que le modèle d'axe de dates utilise TXLSChartDateUnit (xcduDays, xcduMonths, xcduYears) et TXLSChartDateValues. TXLSCustomChart expose le modèle décodé via TXLSChartInfo; les annotations de courbes de tendance et de barres d'erreur sont des objets typés (TXLSChartTrendline, TXLSChartErrorBars) accessibles depuis chaque série
Enregistrements de création de graphiques
La création de feuilles graphiques et du builder accepte des enregistrements simples au lieu de graphes d'objets : TXLSChartTrendlineInfo, TXLSChartErrorBarsInfo, TXLSChartDataLabelsInfoet TXLSChartSeriesStyleInfo remplissent les entrées de série passées à TXLSWorksheets.AddChartSheet et au builder de graphiques partagé, et TXLSPivotChartInfo décrit l'habillage de graphique croisé dynamique utilisé lorsqu'un graphique est rattaché à un tableau croisé dynamique
Inspection des remplissages de graphiques classiques
TXLSCustomChart.GetChartModel décode les tables de propriétés OfficeArt natives prises en charge et les tables de propriétés tertiaires dans les enregistrements GelFrame, y compris les propriétés qui suivent des entrées de charges complexes ; la représentation existante du builder reste prise en charge, et des bornes de tables malformées laissent le remplissage typé antérieur inchangé et signalent l'enregistrement non pris en charge
L'inspection de graphiques valide la charge complète stockée de texte et d'annotations avant d'ajouter un état typé : des noms de courbes de tendance ou des séparateurs d'étiquettes de données tronqués signalent leur identifiant d'enregistrement via _UnsupportedSemanticRecordID, tandis que des en-têtes SeriesText nil ou trop petits signalent cet enregistrement comme non pris en charge pour BIFF5 comme pour BIFF8 ; une étendue déclarée de texte de série qui dépasse sa charge lève EReadError, libère le modèle partiel et laisse les enregistrements de graphiques stockés inchangés
Le getter de marqueurs et l'inspection de remplissages préservent le stockage brut des graphiques ; le chemin de capture d'apparence déclarée valide séparément les graphiques principaux pris en charge, tandis que des sommes de contrôle d'extensions de titres riches ou de formes non vérifiées restent non prises en charge
Lecteurs bornés de graphiques, de chaînes et de polices stockés
TXLSChartStoredBytes est un tableau d'octets détaché et TXLSChartStoredRecord contient RecordId et Data ; ces lecteurs inspectent le stockage source retenu sans créer de modèle de graphique décodé ni évaluer de formules
| TXLSCustomChart.GetStoredRecordInfo | Renvoie un identifiant d'enregistrement et une longueur d'octets comptée pour un index d'enregistrement en base zéro sans copier sa charge |
| TXLSCustomChart.ReadStoredRecord | Copie une charge après avoir validé l'index et le MaxBytes non négatif ; la limite d'octets par défaut est High(Int64) |
| TXLSCustomChart.ReadStoredFormulaLeafInfo | Inspecte une feuille BRAI stockée cohérente en utilisant le calculateur source exact et des quotas d'octets et de texte non négatifs ; des calculateurs étrangers ou propriétaires de traduction renvoient une feuille non prise en charge, et AllowUnboundBiff vaut False par défaut |
| TXLSCustomChart.ReadStoredFormulaLiteral | Renvoie un littéral détaché seulement après les mêmes contrôles de provenance et de quotas ; une feuille non prise en charge lève EInvalidOperation |
| TXLSCustomChart.SourceBiffVersion, SourceCodePage | Provenance en lecture seule des enregistrements de graphiques retenus |
| TXLSStringTable.GetStoredStringLength, ReadStoredString | Compte le stockage UTF-16 existant en utilisant l'identité de chaîne en base 1 de la table, puis copie seulement quand le quota de caractères non négatif le couvre ; des identités invalides et un stockage UTF-16 incomplet sont rejetés |
| TXLSFontList.GetStoredNameLength, ReadStoredName | Vérifie la clé de police stockée à l'index en base zéro de la liste avant de compter ou de copier son nom sous un quota de caractères non négatif |
| TMsoFbtOptItem.HasStoredUnicodeString | Vérifie des métadonnées stockées bornées de chaînes Unicode complexes sans matérialiser de chaîne |
| TMsoShapeContainer.HasOrdinaryChartObjectData | Vérifie le type d'objet graphique stocké, une identité d'objet non nulle, des indicateurs pris en charge et l'absence de données de queues d'objets inconnues |
Maintenance de la table de chaînes partagées et émission SST
TXLSStringTable de lxStringTable soutient les chaînes partagées du classeur classique ; les membres ci-dessous couvrent l'enregistrement côté lecteur, la maintenance d'emplacements et l'émission brute de SST pour les enregistrements aller-retour
KeyExists, AddWithExtras | KeyExists indique si une chaîne occupe déjà un emplacement ; AddWithExtras est le compagnon côté lecteur de Add qui attache la charge brute rgRun de texte enrichi et rgExtRst phonétique à l'entrée sans augmenter son compte de références, parce que chaque cellule référente restaure ensuite le compte via le chemin d'ajout normal |
Replace, ReplaceIndex | Replace retire une référence à l'ancien emplacement, le libérant quand son compte atteint zéro, et rajoute le texte en renvoyant l'emplacement résultant ; ReplaceIndex déplace une référence de l'ancien emplacement vers le nouveau sans copier le texte |
AddSSTData, InitExtIndex | AddSSTData émet la charge SST brute dans la liste de blobs de l'écrivain ; la surcharge prenant une table de remappage de segments de police réécrit chaque index de police FormatRun en sortie ([MS-XLS] §2.5.129) si bien que les segments enrichis suivent la réordonnancement des polices à l'enregistrement, tandis qu'une table vide conserve l'émission verbatim historique, et InitExtIndex numérote les compartiments ExtSST sur les emplacements vivants avant l'émission |
SlotCount, ExtIndex, ParsedExtSSTDsst, ParsedExtSSTItemCount, BiffSizeLimit | SlotCount est la borne supérieure en base 1 pour l'itération des emplacements, les emplacements supprimés se lisant comme vides, ExtIndex résout un emplacement vers son numéro de compartiment ExtSST ou -1 pour un emplacement non vivant, ParsedExtSSTDsst et ParsedExtSSTItemCount retiennent les valeurs importées d'en-têtes EXT/SST, et BiffSizeLimit borne chaque segment d'enregistrement émis — l'écrivain classique le fixe à 2080 octets pour BIFF5 et 8224 pour BIFF8 |
Pièces jointes PDF, signatures et export HTML
IXLSPDFAttachmentSource | WriteTo diffuse les octets de la pièce jointe dans l'export PDF sans que l'exportateur doive posséder les données sources |
TXLSPDFExport | AttachmentDuplicatePolicy sélectionne la gestion des noms en double, AttachmentSpoolThreshold contrôle le spooling des pièces jointes, et DocumentLanguage écrit les métadonnées de langue du document |
TXLSPDFSignature | TextAlign, TextSize, TextColor, TextBoldet TextItalic configurent l'apparence visible de la signature |
TXLSHTMLExport | ViewMode (type TXLSHtmlViewMode: vue courante ou tableau de feuille de calcul complet) choisit la présentation HTML, tandis que HotTrackTargets (ensemble de TXLSHtmlHotTrackTarget) et HotTrackColor configurent la surbrillance interactive des cellules et des objets |
TXLSXHtmlExportOptions | ViewMode, HotTrackTargetset HotTrackColor fournissent les contrôles équivalents de l'export HTML XLSX |
Audit de calcul et contrôles du classeur
TXLSCalculationAuditReport | Truncated signale une troncature par limite d'anomalies, StackTruncated signale une troncature des frames de la pile d'appels, et Issues indexe les anomalies de calcul enregistrées |
TXLSUserFunctionRegistry | Generation change dès que l'ensemble de fonctions utilisateur enregistrées change, ce qui permet d'invalider les liaisons de formules en cache |
EXLSReportRecoverableData | Category identifie la catégorie de données de rapport récupérables présentée à l'appelant |
IXLSWorkBook | ManualCalculationThreadCount limite le nombre de workers utilisé par le calcul manuel |
TXLSXDataValidation | HasUnknownImeMode signale une valeur de mode IME que HotXLS a préservée mais ne reconnaît pas |
TXLSXTable | ColumnCalculatedFormulaArrayRaw et ColumnTotalsFormulaArrayRaw exposent le texte de formule matricielle d'origine des colonnes de tables |
Compatibilité de l'habillage hérité des PivotCache
TXLSPivotCache | RawBucketIndex identifie la position du sous-flux source, RawFramingIsLegacy identifie un habillage HotXLS ancien, RawModelIsComplete indique si le modèle typé représente chaque enregistrement, et CanUpgradeFraming indique si la réémission typée opt-in est sans risque |
TXLSPivotCache | StreamId expose l'identité du flux de cache classique, SourceDataType expose le type de données sources classique, et RawHasStorageStream indique si un cache chargé provenait d'un flux de stockage PivotCache indépendant |
TXLSWorkbook | UpgradeLegacyPivotCacheFraming opte pour la réécriture des seuls habillages de cache HotXLS hérités dont le modèle typé est complet ; la relecture brute ordinaire du cache reste le comportement par défaut |
StreamId est écrit comme l'enregistrement SXStreamID ([MS-XLS] §2.4.303) et répété comme le champ SXDB de l'en-tête idstm , qui doit lui être égal ; SourceDataType est écrit comme l'enregistrement SXVS ([MS-XLS] §2.4.317 : $0001 feuille de calcul, $0002 externe, $0004 consolidation, $0010 scénario) et répété comme le champ SXDB de l'en-tête vsType , qui doit lui être égal. Les caches construits à partir d'une plage de feuille de calcul démarrent au type feuille de calcul, tandis que les caches relus depuis un fichier conservent la valeur portée par leur sous-flux, de sorte que l'enregistreur BIFF ne laisse jamais un champ SXDB nommer un enregistrement qu'il n'a pas émis ; RawHasStorageStream marque un cache chargé depuis son propre flux de stockage dont le descripteur global de classeur précède les enregistrements en cache
Intégration du presse-papiers et options de collage
TXLSPasteOption = (xlpoValuesOnly, xlpoInsertRows, xlpoInsertCols);
TXLSPasteOptions = set of TXLSPasteOption;
function XLSGetClipboardText: WideString;
function XLSSetClipboardText(const Text: WideString): Boolean;
function XLSSetClipboardTextAndHtml(const Text: WideString;
const Html: AnsiString): Boolean;
function XLSBuildHtmlClipboard(const Html: AnsiString): AnsiString;
function XLSEncodeClipboardField(const Text: WideString): WideString;
function XLSClipboardHasText: Boolean;
function XLSParseClipboardGrid(const ClipboardText: WideString;
Loader: TXLSCSVLoader): Boolean;
function XLSClipboardHasXmlSpreadsheet: Boolean;
function XLSGetClipboardXmlSpreadsheet: WideString;
function XLSParseXmlSpreadsheet(const XmlText: WideString;
Loader: TXLSCSVLoader): Boolean;
function XLSClipboardHasBiff8: Boolean;
function XLSGetClipboardBiff8: AnsiString;
function XLSReadClipboardPasteData(out Biff8: AnsiString;
out Text: WideString): Boolean;
function XLSSetClipboardBiff8(const Biff8: AnsiString;
const Text: WideString; const Html: AnsiString = ''): Boolean;
PasteFromClipboard des deux façades : xlpoValuesOnly conserve les valeurs en cache des cellules à formules et ignore les formats et les fusions, tandis que xlpoInsertRows et xlpoInsertCols décalent le contenu existant avant que le bloc ne se poseCF_UNICODETEXT (avec repli sur CF_TEXT via la page de codes ANSI courante), XLSSetClipboardTextAndHtml écrit le texte et un payload HTML Format stylé en une seule transaction, XLSBuildHtmlClipboard calcule les offsets d'octets CF_HTML d'un document ou d'un fragment, et XLSEncodeClipboardField échappe un champ séparé par des tabulations. XLSParseClipboardGrid analyse le texte du presse-papiers comme des lignes séparées par des tabulations, avec le même sniffing de types que TXLSCSVLoader applique au CSV, XLSParseXmlSpreadsheet applique le même remplissage par le loader à un payload SpreadsheetML 2003 récupéré avec XLSGetClipboardXmlSpreadsheet, et les helpers Biff8 détectent et lisent le flux natif qu'Excel dépose lui-même sur le presse-papiers, si bien que les données collées conservent valeurs, formules et mise en forme sans perte de texteXLSReadClipboardPasteData capture le flux Biff8 et le texte Unicode sous un seul verrou du presse-papiers, si bien qu'un collage n'a plus à rouvrir le presse-papiers entre les deux lectures et ne perd aucun des deux formats au profit d'un détenteur concurrent. XLSSetClipboardBiff8 est le côté écriture correspondant : il dépose le flux de fichier composé BIFF8, le texte Unicode séparé par des tabulations et un payload CF_HTML facultatif en une seule transaction — passez un Text ou un Html vide pour sauter l'un des deux formats compagnons, la partie Biff8 étant obligatoireRésolution du texte d'affichage des cellules
TXLSCellDisplayMode = (xcdmFormattedValue, xcdmFormulaText,
xcdmSuppressedZero);
TXLSCellDisplayOptions = record
ShowFormulas: Boolean;
ShowZeros: Boolean;
SheetProtected: Boolean;
FormulaWidthFactor: Double;
DateSerialZero: Double;
end;
TXLSCellDisplayInput = record
HasFormula: Boolean;
FormulaHidden: Boolean;
IsNumericZero: Boolean;
FormulaText: WideString;
FormattedText: WideString;
end;
TXLSCellDisplayResult = record
Mode: TXLSCellDisplayMode;
Text: WideString;
TreatAsText: Boolean;
EffectiveWidthFactor: Double;
end;
function XLSDefaultCellDisplayOptions: TXLSCellDisplayOptions;
function XLSNormalizeFormulaDisplayText(const FormulaText: WideString): WideString;
function XLSResolveCellDisplay(const Options: TXLSCellDisplayOptions;
const Input: TXLSCellDisplayInput): TXLSCellDisplayResult;
XLSResolveCellDisplay directement avec leurs propres enregistrements d'entrée ; XLSDefaultCellDisplayOptions renvoie les valeurs par défaut canoniques et XLSNormalizeFormulaDisplayText normalise une chaîne de formule pour l'affichageObjets de validation de données classiques
TXLSDataValidationType = (xlsDvAny, xlsDvWhole, xlsDvDecimal, xlsDvList,
xlsDvDate, xlsDvTime, xlsDvTextLength, xlsDvCustom);
TXLSDvErrorStyle = (xlsDvErrStop, xlsDvErrWarning, xlsDvErrInformation);
TDVRange = class; { one validation rule over one or more ranges }
TDVRangeList = class; { the per-sheet rule collection }
TDataValidator = class; { engine that checks edits against the rules }
TXLSWorksheet.Add*Validation créent des règles TDVRange dans la TDVRangeListde la feuille ; chaque règle porte son TXLSDataValidationType, ses bornes, ses messages de saisie et d'erreur, et son TXLSDvErrorStyle. TDataValidator évalue une modification par rapport aux règles et indique si la valeur est acceptable — c'est aussi le contrôle qui se cache derrière les prompts de validation d'ExcelBalayage et résolution des couleurs indexées
TXLSIndexedColorKind = (xickPalette, xickAutomatic, xickSystem, xickInvalid);
TXLSSystemColorRole = (xscrNone, xscrWindowText, xscrWindowBackground,
xscrChartText, xscrChartBackground, xscrChartNeutral, xscrToolTipText);
TXLSIndexedColorResolution = record
Kind: TXLSIndexedColorKind;
RawIndex: Int64;
PaletteSlot: Integer;
SystemColorRole: TXLSSystemColorRole;
ARGB: LongWord;
HasResolvedColor: Boolean;
end;
TXLSNearestIndexedColorMatch = record
InputARGB: LongWord;
ColorIndex: Integer;
PaletteSlot: Integer;
ARGB: LongWord;
DistanceSquared: Double;
ExactMatch: Boolean;
end;
TXLSIndexedColorUsageKind = (xicukFont, xicukFillForeground,
xicukFillBackground, xicukGradient, xicukBorder, xicukConditionalFormat,
xicukChart, xicukShape, xicukComment, xicukWorksheet, xicukOther);
ResolveIndexedColor, NearestIndexedColoret ScanIndexedColorUsage : une résolution indique laquelle des quatre sources TXLSIndexedColorKind a fourni un jeton de couleur indexée, avec son emplacement de palette, son rôle de couleur système et son ARGB normalisé ; une correspondance la plus proche ajoute la distance RGB au carré et le flag de correspondance exacte ; et le balayage d'utilisation étiquette chaque catégorie consommatrice qui verrouille un emplacement de palette. La bibliothèque maintient un cache interne TXLSIndexedColorMatcher indexé par génération de palette — FindNearest répond aux requêtes de couleur la plus proche depuis ce cache et UpdateSlot corrige un emplacement de palette — si bien que les résolutions répétées restent sans allocationHelpers de références A1
function XLSA1CellRef(ARow, ACol: Integer): WideString;
function XLSTryParseA1CellRef(const ARef: WideString;
out ARow, ACol: Integer): Boolean;
function XLSTryParseA1RangeRef(const ARef: WideString;
out ARow1, ACol1, ARow2, ACol2: Integer): Boolean;
False pour une entrée malformée au lieu de lever une exception