API de lecture et d'écriture directes
TXLSDirectReader et TXLSDirectWriter traitent les packages XLSX sans conserver en mémoire une grille complète de feuille de calcul ; les appels d'API qui décrivent une feuille doivent donc être effectués avant ou pendant la phase de streaming correspondante
Cycle de vie de l'écrivain et valeurs de cellule
TXLSDirectWriter.BeginFile ou BeginStream démarre un package, les méthodes de feuille définissent une feuille de calcul à la fois et Finish finalise le package
| Scalar cells | WriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTimeet WriteError |
| Formula cells | WriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTimeet WriteFormulaError acceptent les résultats mis en cache fournis par l'appelant |
| Shared strings | UseSharedStrings active la déduplication des chaînes au niveau du package |
| Statistics | CellCount indique le nombre de cellules émises |
| Panes | FreezePanes(ColSplit, RowSplit) écrit un fractionnement figé à la colonne et à la ligne indiquées, en base un |
Les lignes et les colonnes sont basées sur un dans la surface publique de l'écrivain et doivent être fournies dans l'ordre avant de la feuille de calcul
Cycle de vie du patch de feuille
BeginPatch remplace une feuille de calcul ou en insère une nouvelle tout en préservant les parties intactes du package. Une initialisation qui échoue libère immédiatement l'archive source et le flux source, que la feuille soit manquante, qu'une partie de package requise manque, que l'archive soit invalide ou que la création de la destination échoue. Les fichiers sources et les enregistrements temporaires appartenant à l'appelant restent de sa responsabilité ; les handles libérés permettent de supprimer ou de libérer ces sources
Close et la destruction libèrent les handles de la source même en l'absence de destination active ou si la finalisation du patch lève une exception. Un remplacement de destination infructueux conserve sa sortie en attente pour inspection, et l'écrivain peut démarrer un patch suivant ou une opération fichier ordinaire après un échec d'initialisation
Styles réutilisables
AddCellStyle enregistre un descripteur de style immuable au niveau du package et CloneCellStyle dérive un nouveau descripteur sans conserver les lignes de la feuille de calcul
Noms définis et hyperliens
AddDefinedName, AddLocalDefinedName, AddDefinedRangeet AddLocalDefinedRange ajoutent des noms de classeur ou locaux à la feuille avant la finalisation du package
AddHyperlink, AddHyperlinkRange, AddInternalHyperlinket AddInternalHyperlinkRange émettent des relations externes ou des emplacements internes de feuille pour une cellule ou une plage
Validation des données
AddDataValidation et AddDataValidationSqRef exposent la surface complète des règles, tandis que AddListValidation, AddWholeNumberValidation, AddDecimalValidation, AddDateValidation, AddTimeValidation, AddTextLengthValidationet AddCustomValidation fournissent des fonctions d'aide typées
Mise en forme conditionnelle
AddConditionalFormat, AddConditionalFormatExpression, AddConditionalFormatContainsText, AddConditionalFormatNotContainsText, AddConditionalFormatBeginsWith, AddConditionalFormatEndsWith, AddConditionalFormatTop10, AddConditionalFormatAboveAverage, AddConditionalFormatDuplicateValues, AddConditionalFormatUniqueValues, AddConditionalFormatContainsBlanks, AddConditionalFormatNotContainsBlanks, AddConditionalFormatContainsErrorset AddConditionalFormatNotContainsErrors ajoutent des règles scalaires
AddConditionalFormatDataBar, AddConditionalFormatColorScale2, AddConditionalFormatColorScale3et AddConditionalFormatIconSet ajoutent des règles visuelles ; ClearConditionalFormats supprime les règles en attente de la feuille courante
Filtre automatique et tables
AddAutoFilterValue, AddAutoFilterDateGroupet AddAutoFilterSortCondition configurent le filtre de la feuille de calcul
AddTable crée une partie de table, et AddTableFilterValue, AddTableFilterDateGroupet AddTableSortCondition configurent son état de filtre et de tri
Protection et sauts de page
ProtectSheet, UnprotectSheet, AddProtectedRangeet ClearProtectedRanges configurent la protection de la feuille de calcul ; ProtectWorkbook et UnprotectWorkbook configurent la structure du classeur et les verrous de fenêtre
AddHorizontalPageBreak et AddVerticalPageBreak émettent des sauts de page manuels pour la feuille de calcul courante
Diagnostics de stockage du lecteur direct
TXLSDirectReader.SharedStringMemoryLimit borne la mémoire des chaînes partagées décodées, SharedStringsOnDisk signale la migration vers un stockage indexé temporaire, SharedStringCount indique le nombre d'entrées chargées et ParallelDiag expose des diagnostics bornés de l'analyseur parallèle
Projection du lecteur et état des formules
FirstRow, LastRow, IncludeColumnet ClearColumnProjection poussent la sélection de lignes et de colonnes (base un) dans l'analyseur de feuille de calcul avant l'allocation des valeurs, formules ou texte enrichi
IncludeFormulaText vaut true par défaut ; le désactiver conserve les valeurs en cache, les coordonnées, les styles et HasFormula , tandis que FormulaTextAvailable passe à false et Formula reste vide
Curseur de ligne
TXLSRowCursor.Open accepte des fichiers ou flux XLS, XLSX, XLSM, ODS, CSV et TSV ; l'auto-détection ZIP distingue les packages ODS des classeurs Open XML avant l'ouverture d'une feuille
SelectSheet et SelectSheetByName choisissent une feuille de calcul ; SheetCount, SheetNames, SheetIndex, RowIndexet Eof exposent l'état de parcours, tandis que SharedStringMemoryLimit applique la même politique bornée de chaînes partagées que le lecteur direct
FirstRow, LastRow, IncludeColumnet ClearColumnProjection utilisent les mêmes filtres en base un pour tous les formats du curseur ; les options transmises ne peuvent pas changer entre FindFirst et EOF mais redeviennent modifiables après EOF, une sélection de feuille ou une fermeture
Chaque TXLSRowCursorCell signale HasFormula indépendamment de FormulaTextAvailable; le XLS classique expose la présence de formule et les résultats en cache sans prétendre fournir un texte de jetons indisponible, tandis que IncludeFormulaText peut supprimer le texte de formule XLSX et ODS avant l'accumulation
Le parcours ODS conserve un modèle de ligne physique, rogne les blocs de lignes répétées à l'intervalle demandé, saute directement entre les colonnes sélectionnées à l'intérieur des étendues répétées, avance sur les cellules couvertes sans les renvoyer comme valeurs, et signale les nombres de répétition invalides ou limités par la grille via OnSkippedRecord
State distingue xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelledet xrcsFaulted; Cancel est idempotent, invalide la ligne courante et libère le flux de la feuille active tout en conservant la source, si bien qu'une sélection explicite de feuille peut démarrer une nouvelle passe
La surcharge flux prend xsoBorrowedpar défaut, restaure la position initiale de l'appelant à la fermeture, et accepte xsoOwned pour transférer la propriété après une ouverture réussie ; les ouvertures échouées ne consomment jamais la propriété de l'appelant
CurrentRowView emprunte le tableau de la ligne courante sans le copier et vérifie une génération à chaque accès ; faire avancer, sélectionner, annuler, fermer ou détruire le curseur invalide la vue et lève EXLSRowCursorViewInvalidated lors d'un accès ultérieur
PeakRowBufferedBytes est une estimation monotone, depuis le Open le plus récent, des enregistrements de cellules, charges utiles gérées, textes enrichis et données du backend de format retenus pour une ligne logique ; il vise les diagnostics de régression à mémoire bornée plutôt qu'une comptabilité exacte du tas
SheetPassesStarted compte les démarrages réussis de backends de feuille de calcul ; inspecter les noms de feuilles ou ignorer une feuille via la façade de callback n'ouvre pas la partie de la feuille de calcul
Adaptateur de callback en parcours avant
TXLSForwardReader délègue le décodage XLS, XLSX, ODS, CSV et TSV à TXLSRowCursor, convertit chaque cellule de la ligne courante en callback OnCell , et préserve les mêmes contrats de bornes de lignes, de projection de colonnes, d'état de formule, de texte enrichi, de mot de passe, d'enregistrements ignorés, de position de flux et de tampon borné
PeakRowBufferedBytes et SheetPassesStarted exposent les diagnostics partagés du curseur sur la surface de callback, tandis que le XLS classique conserve en plus ClassicBytesRead et ClassicPeakBufferedBytes
Événements du lecteur et types d'enregistrements
Le lecteur et le curseur de ligne exposent des callbacks facultatifs et des enregistrements simples, tous déclarés dans lxDirectRead. Chaque callback suit la même forme : l'enregistrement décrit un élément diffusé, et la mise à Abort arrête le scan (les événements de feuille acceptent en plus SkipSheet)
| Cells | OnCell (type TXLSDirectCellEvent) délivre un TXLSDirectCell par cellule dont Kind (TXLSDirectCellKind: xdkEmpty, xdkNumber, xdkString, xdkBoolean, xdkDate, xdkError) sélectionne le champ de valeur renseigné ; le texte enrichi voyage sous forme de TXLSDirectRichText contenant des entrées TXLSDirectRichTextRun , chacune avec un TXLSDirectRichColor (type TXLSDirectRichColorKind), TXLSDirectRichUnderlineet TXLSDirectRichVertAlign, plus des données facultatives TXLSDirectPhoneticProperties et TXLSDirectPhoneticRun data |
| Sheet framing | OnSheet (TXLSDirectSheetEvent) peut ignorer une feuille de calcul entière avant l'analyse de ses cellules ; OnSkippedRecord (TXLSDirectSkippedEvent) signale le contenu malformé ou tronqué avec l'identifiant d'enregistrement et la raison |
| Sheet layout | OnDimension, OnSheetFormat, OnColumn, OnRow, OnMergeet OnPane délivrent les enregistrements TXLSDirectDimension, TXLSDirectSheetFormat, TXLSDirectColumn, TXLSDirectRow, TXLSDirectMergeet TXLSDirectPane ; l'état de volet utilise TXLSDirectPaneState (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown) |
| Cursor state | TXLSRowCursor.State est un TXLSRowCursorState (xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled, xrcsFaulted) ; la surcharge flux de Open prend un TXLSStreamOwnership (xsoBorrowed par défaut, xsoOwned pour transférer la propriété), et CurrentRowView renvoie une vue empruntée IXLSRowCursorView dont la propriété Valid protège l'accès et dont ValueByCol lit une cellule de la ligne empruntée sans copie ; la vue s'invalide quand le curseur avance |
Types de paramètres et de styles de l'écrivain
Les fonctions d'aide typées de l'écrivain (lxDirectWrite) acceptent des enregistrements et des énumérations afin que les appels restent sans allocation : WriteRichString prend un TXLSDirectRichText; AddCellStyle construit un style au niveau du package à partir d'un TXLSDirectCellStyle dont l'alignement (TXLSDirectHorizontalAlignment, TXLSDirectVerticalAlignment), le soulignement (TXLSDirectUnderline), le motif de remplissage (TXLSDirectFillPattern) et les côtés de bordure (TXLSDirectStyleBorder avec TXLSDirectBorderSide) reflètent le modèle de style OOXML. Les mises en forme conditionnelles passent un TXLSDirectConditionalFormat avec TXLSDirectCfKind / TXLSDirectCfOperator / TXLSDirectCfValue / TXLSDirectCfValueKind et TXLSDirectIconSetType, la validation de données un TXLSDirectDataValidation, les tables un TXLSDirectTable, les hyperliens un TXLSDirectHyperlink, les noms définis un TXLSDirectDefinedName, les styles différentiels un TXLSDirectDxfStyle, les commentaires un TXLSDirectComment, les images un TXLSDirectImage avec TXLSDirectImageFormat, les graphiques un TXLSDirectChart avec TXLSDirectChartSeries et TXLSDirectChartType, les fusions un TXLSDirectMergeRange, les plages protégées un TXLSDirectProtectedRange, la protection de feuille un ensemble TXLSDirectSheetProtectionOptions de TXLSDirectSheetProtectionOption, l'état de tri du filtre automatique un TXLSDirectSortState, les options de colonne un TXLSDirectColumnOption, et la géométrie de page un enregistrement TXLSDirectPageMargins record
TXLSDirectNeedRow = procedure(Sender: TObject; RowIndex: Integer;
var Eof: Boolean) of object;
function XLSDirectColName(Col: Integer): WideString;
function XLSDirectParseRef(const Ref: WideString;
out Col, Row: Integer): Boolean;
function XLSDirectPasswordHash(const Password: WideString): WideString;
OnNeedRow tire les lignes depuis l'application : le fournisseur écrit les cellules de la ligne directement via l'écrivain et laisse Eof = False, ou déclare l'épuisement avec Eof = True pour arrêter la boucle. Les fonctions d'aide convertissent entre coordonnées et primitives de protection : XLSDirectColName rend une colonne en base zéro sous forme de lettres A1, XLSDirectParseRef analyse une référence de cellule A1, et XLSDirectPasswordHash calcule le hachage de mot de passe hérité que les enregistrements de protection de feuille stockent