Documentazione HotXLS

API di lettura e scrittura diretta

TXLSDirectReader e TXLSDirectWriter elaborano pacchetti XLSX senza mantenere in memoria una griglia completa del foglio di lavoro, quindi le chiamate API che descrivono un foglio devono essere effettuate prima o durante la corrispondente fase di streaming

Ciclo di vita dello scrittore e valori delle celle

TXLSDirectWriter.BeginFile o BeginStream avvia un pacchetto, i metodi dei fogli definiscono un foglio di lavoro alla volta e Finish finalizza il pacchetto

Scalar cellsWriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTimee WriteError
Formula cellsWriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTimee WriteFormulaError accettano risultati memorizzati nella cache forniti dal chiamante
Shared stringsUseSharedStrings abilita la deduplicazione delle stringhe a livello di pacchetto
StatisticsCellCount riporta il numero di celle emesse
PanesFreezePanes(ColSplit, RowSplit) scrive una divisione bloccata alla colonna e alla riga indicate, a base uno

Righe e colonne sono a base uno nella superficie pubblica dello scrittore e devono essere fornite in ordine di foglio in avanti

Ciclo di vita della patch del foglio di lavoro

BeginPatch sostituisce un foglio di lavoro o ne inserisce uno nuovo preservando le parti intatte del package. Un'inizializzazione fallita rilascia immediatamente l'archivio sorgente e lo stream sorgente, incluso il caso di foglio mancante, parte richiesta del package mancante, archivio non valido o fallimento nella creazione della destinazione. I file sorgente e le registrazioni temporanee di proprietà di chi chiama restano responsabilità di chi chiama; gli handle rilasciati permettono di rimuovere o rilasciare quelle sorgenti

Close e la distruzione rilasciano gli handle della sorgente anche quando non c'è una destinazione attiva o la finalizzazione della patch lancia un'eccezione. Una sostituzione della destinazione non riuscita conserva il proprio output in staging per poterlo ispezionare, e il writer può avviare in seguito una nuova patch o una normale operazione su file dopo un fallimento di inizializzazione

Stili riutilizzabili

AddCellStyle registra un handle di stile immutabile a livello di pacchetto e CloneCellStyle deriva un nuovo handle senza conservare righe del foglio di lavoro

Nomi definiti e collegamenti ipertestuali

AddDefinedName, AddLocalDefinedName, AddDefinedRangee AddLocalDefinedRange aggiungono nomi a livello di cartella di lavoro o di foglio prima della finalizzazione del pacchetto

AddHyperlink, AddHyperlinkRange, AddInternalHyperlinke AddInternalHyperlinkRange emettono relazioni esterne o posizioni interne del foglio per una cella o un intervallo

Convalida dei dati

AddDataValidation e AddDataValidationSqRef espongono l'intera superficie delle regole, mentre AddListValidation, AddWholeNumberValidation, AddDecimalValidation, AddDateValidation, AddTimeValidation, AddTextLengthValidatione AddCustomValidation forniscono helper tipizzati

Formattazione condizionale

AddConditionalFormat, AddConditionalFormatExpression, AddConditionalFormatContainsText, AddConditionalFormatNotContainsText, AddConditionalFormatBeginsWith, AddConditionalFormatEndsWith, AddConditionalFormatTop10, AddConditionalFormatAboveAverage, AddConditionalFormatDuplicateValues, AddConditionalFormatUniqueValues, AddConditionalFormatContainsBlanks, AddConditionalFormatNotContainsBlanks, AddConditionalFormatContainsErrorse AddConditionalFormatNotContainsErrors aggiungono regole scalari

AddConditionalFormatDataBar, AddConditionalFormatColorScale2, AddConditionalFormatColorScale3e AddConditionalFormatIconSet aggiungono regole visive; ClearConditionalFormats rimuove le regole in sospeso per il foglio corrente

Filtro automatico e tabelle

AddAutoFilterValue, AddAutoFilterDateGroupe AddAutoFilterSortCondition configurano il filtro del foglio di lavoro

AddTable crea una parte di tabella e AddTableFilterValue, AddTableFilterDateGroupe AddTableSortCondition configurano il suo stato di filtro e ordinamento

Protezione e interruzioni di pagina

ProtectSheet, UnprotectSheet, AddProtectedRangee ClearProtectedRanges configurano la protezione del foglio di lavoro; ProtectWorkbook e UnprotectWorkbook configurano la struttura della cartella di lavoro e i blocchi delle finestre

AddHorizontalPageBreak e AddVerticalPageBreak emettono interruzioni di pagina manuali per il foglio di lavoro corrente

Diagnostica dello storage del lettore diretto

TXLSDirectReader.SharedStringMemoryLimit limita la memoria delle stringhe condivise decodificate, SharedStringsOnDisk segnala la migrazione a uno storage indicizzato temporaneo, SharedStringCount riporta il numero di voci caricate e ParallelDiag espone la diagnostica limitata del parser parallelo

Proiezione del lettore e stato delle formule

FirstRow, LastRow, IncludeColumne ClearColumnProjection spingono la selezione di righe e colonne (a base uno) nel parser del foglio di lavoro prima dell'allocazione di valori, formule o testo ricco

IncludeFormulaText è true per impostazione predefinita; disabilitandolo si conservano valori in cache, coordinate, stili e HasFormula , mentre FormulaTextAvailable diventa false e Formula resta vuoto

Cursore di riga

TXLSRowCursor.Open accetta file o stream XLS, XLSX, XLSM, ODS, CSV e TSV; il rilevamento automatico ZIP distingue i pacchetti ODS dalle cartelle di lavoro Open XML prima che un foglio venga aperto

SelectSheet e SelectSheetByName scelgono un foglio di lavoro; SheetCount, SheetNames, SheetIndex, RowIndexe Eof espongono lo stato di attraversamento, mentre SharedStringMemoryLimit applica la stessa politica limitata delle stringhe condivise del lettore diretto

FirstRow, LastRow, IncludeColumne ClearColumnProjection usano gli stessi filtri a base uno su tutti i formati del cursore; le opzioni passate non possono cambiare tra FindFirst ed EOF, ma tornano modificabili dopo EOF, dopo la selezione del foglio o dopo la chiusura

Ogni TXLSRowCursorCell riporta HasFormula indipendentemente da FormulaTextAvailable; l'XLS classico espone presenza della formula e risultati in cache senza dichiarare disponibile il testo dei token, mentre IncludeFormulaText può sopprimere il testo delle formule XLSX e ODS prima dell'accumulo

L'attraversamento ODS conserva un solo template fisico di riga, taglia i blocchi di righe ripetute all'intervallo richiesto, salta direttamente tra le colonne selezionate all'interno degli span ripetuti, avanza attraverso le celle coperte senza restituirle come valori e segnala conteggi di ripetizione non validi o limitati dalla griglia tramite OnSkippedRecord

State distingue xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancellede xrcsFaulted; Cancel è idempotente, invalida la riga corrente e rilascia lo stream del foglio di lavoro attivo conservando la sorgente, così una selezione esplicita del foglio può avviare un nuovo passaggio

L'overload con stream usa per default xsoBorrowed, ripristina la posizione iniziale del chiamante alla chiusura e accetta xsoOwned per trasferire la proprietà dopo un'apertura riuscita; le aperture fallite non consumano mai la proprietà del chiamante

CurrentRowView prende in prestito l'array della riga corrente senza copiarlo e verifica una generazione prima di ogni accesso; avanzare, selezionare, annullare, chiudere o distruggere il cursore invalida la vista e solleva EXLSRowCursorViewInvalidated agli accessi successivi

PeakRowBufferedBytes è una stima monotona, dall' Open più recente, dei record di cella, payload gestiti, testo ricco e dati del backend di formato trattenuti per una riga logica; è pensata per la diagnostica di regressioni su memoria limitata, non per un conteggio esatto dell'heap

SheetPassesStarted conta gli avvii riusciti del backend del foglio di lavoro; ispezionare i nomi dei fogli o saltare un foglio tramite la facciata di callback non apre la parte del foglio di lavoro

Adattatore di callback forward

TXLSForwardReader delega la decodifica di XLS, XLSX, ODS, CSV e TSV a TXLSRowCursor, converte ogni cella della riga corrente in una callback OnCell e preserva gli stessi contratti di limiti di riga, proiezione di colonne, stato delle formule, testo ricco, password, record saltati, posizione dello stream e buffer limitato

PeakRowBufferedBytes e SheetPassesStarted espongono la stessa diagnostica del cursore sulla superficie di callback, mentre l'XLS classico conserva inoltre ClassicBytesRead e ClassicPeakBufferedBytes

Eventi del lettore e tipi di record

Il lettore e il cursore di riga espongono callback opzionali e record semplici, tutti dichiarati in lxDirectRead. Ogni callback ha la stessa forma: il record descrive un singolo elemento in streaming, e impostare Abort interrompe la scansione (gli eventi del foglio accettano anche SkipSheet)

CellsOnCell (tipo TXLSDirectCellEvent) consegna una TXLSDirectCell per ogni cella, il cui Kind (TXLSDirectCellKind: xdkEmpty, xdkNumber, xdkString, xdkBoolean, xdkDate, xdkError) seleziona il campo valore popolato; il testo ricco viaggia come TXLSDirectRichText contenente voci TXLSDirectRichTextRun , ciascuna con una TXLSDirectRichColor (tipo TXLSDirectRichColorKind), TXLSDirectRichUnderlinee TXLSDirectRichVertAlign, più dati opzionali TXLSDirectPhoneticProperties e TXLSDirectPhoneticRun data
Sheet framingOnSheet (TXLSDirectSheetEvent) può saltare un intero foglio di lavoro prima che le sue celle vengano analizzate; OnSkippedRecord (TXLSDirectSkippedEvent) segnala contenuti malformati o troncati con l'id del record e il motivo
Sheet layoutOnDimension, OnSheetFormat, OnColumn, OnRow, OnMergee OnPane consegnano i record TXLSDirectDimension, TXLSDirectSheetFormat, TXLSDirectColumn, TXLSDirectRow, TXLSDirectMergee TXLSDirectPane ; lo stato dei riquadri usa TXLSDirectPaneState (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown)
Cursor stateTXLSRowCursor.State è un TXLSRowCursorState (xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled, xrcsFaulted); l'overload con stream di Open accetta un TXLSStreamOwnership (xsoBorrowed predefinito, xsoOwned per trasferire la proprietà), e CurrentRowView restituisce una vista presa in prestito IXLSRowCursorView la cui proprietà Valid protegge l'accesso e il cui ValueByCol legge una cella della riga presa in prestito senza copiare; la vista si invalida quando il cursore avanza

Tipi di parametro e di stile dello scrittore

Gli helper tipizzati dello scrittore (lxDirectWrite) accettano record ed enum così le chiamate restano senza allocazioni: WriteRichString riceve un TXLSDirectRichText; AddCellStyle costruisce uno stile a livello di pacchetto da un TXLSDirectCellStyle il cui allineamento (TXLSDirectHorizontalAlignment, TXLSDirectVerticalAlignment), sottolineatura (TXLSDirectUnderline), motivo di riempimento (TXLSDirectFillPattern) e lati del bordo (TXLSDirectStyleBorder con TXLSDirectBorderSide) rispecchiano il modello di stile OOXML. I formati condizionali passano un TXLSDirectConditionalFormat con TXLSDirectCfKind / TXLSDirectCfOperator / TXLSDirectCfValue / TXLSDirectCfValueKind e TXLSDirectIconSetType, la convalida dati un TXLSDirectDataValidation, le tabelle un TXLSDirectTable, i collegamenti ipertestuali un TXLSDirectHyperlink, i nomi definiti un TXLSDirectDefinedName, gli stili differenziali un TXLSDirectDxfStyle, i commenti un TXLSDirectComment, le immagini un TXLSDirectImage con TXLSDirectImageFormat, i grafici un TXLSDirectChart con TXLSDirectChartSeries e TXLSDirectChartType, le unioni un TXLSDirectMergeRange, gli intervalli protetti un TXLSDirectProtectedRange, la protezione del foglio un insieme TXLSDirectSheetProtectionOptions di TXLSDirectSheetProtectionOption, lo stato di ordinamento dell'auto-filter un TXLSDirectSortState, le opzioni di colonna un TXLSDirectColumnOptione la geometria di pagina un record 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 estrae le righe dall'applicazione: il fornitore scrive le celle della riga direttamente attraverso lo scrittore e lascia Eof = False, oppure dichiara l'esaurimento con Eof = True per fermare il ciclo. Gli helper convertono tra coordinate e primitive di protezione: XLSDirectColName rende una colonna a base zero come le sue lettere A1, XLSDirectParseRef analizza un riferimento di cella A1 e XLSDirectPasswordHash calcola l'hash legacy della password che i record di protezione del foglio memorizzano

Vedere anche