Kompilert rapporterings-API
lxReport-enheten kompilerer plassholdere og strukturelle rapportbånd én gang, og bruker deretter data eid av den som kaller, gjennom avgrensede markører uten å skanne genererte arbeidsbokobjekter på nytt
Tabell- og markørkontrakter
| IXLSReportCursor | MoveNext, RowIndex og Values eksponerer én fremoverrettet rad om gangen |
| IXLSReportTable | Name, ColumnCount, ColumnNames og CreateCursor definerer en gjenbrukbar tabellkilde |
| IXLSReportRandomAccessTable | RowCount og todimensjonale Values legger til indeksert tilgang som brukes av koblinger og relasjonsindekser |
| IXLSReportTableProvider | TryGetTable oppløser en navngitt tabell tregt |
| TXLSReportMemoryTable | AddRow, ColumnIndexOf, CreateCursor, ColumnCount, ColumnNames og RowCount gir en eid in-memory-implementasjon |
| TXLSReportDataContext | RegisterTable, AddProvider, TryGetTable, RequireTable, ClearLoadedTables og LoadedTableCount koordinerer ivrige og trege kilder; RegisterResolver, HasResolver, RemoveResolver, ClearResolvers og ResolverCount administrerer typede resolvere, og BeginRun tar øyeblikksbilder av tabeller og leverandører inn i en isolert per-kjørings-økt slik at separate kjøringer aldri deler leverandørresultater |
Kontrollerte spørringsleverandører
IXLSReportQueryExecutor.ExecuteReadOnly holder spørringskjøringen vertseid og godtar bare definisjoner som er registrert av applikasjonskoden
TXLSReportQueryParameter, TXLSReportQueryParameters og TXLSReportQueryDefinition eksponerer Name, CommandText, TimeoutMS, ParameterCount, Parameters, SetParameter og ClearParameters
TXLSReportQueryProvider bruker RegisterQuery, RemoveQuery, Clear og TryGetTable, med Count, Definitions og MaximumTimeoutMS som eksponerer hvitelisten og tidsavbruddstaket
Datasessioner per kjøring
IXLSReportDataSession er den isolerte trege cachen bak én rapportkjøring: DeclareRequest registrerer en TXLSReportDataRequest (type TXLSReportDataRequestKind: xrdrkNamed eller xrdrkUser) hvis TXLSReportDataSource (type TXLSReportDataSourceKind: uspesifisert, celle, områdebånd, tabellbånd eller uttrykk) og TXLSReportDataParameter-liste beskriver kilden og verdiene dens, og hvis RunControl er vertens IXLSReportRunControl-avbrytingshåndtak; HasResolver tester en leverandørnøkkel, TryGetTable og RequireTable leser bufrede aliaser, TryResolveTable og RequireResolvedTable oppløser ved behov til en TXLSReportDataResolveResult (status TXLSReportDataResolveStatus: xrdrsUnhandled, xrdrsResolved, xrdrsNotFound eller xrdrsDataError), og TryGetState rapporterer en TXLSReportDataSessionState med lasting, oppløst, ikke funnet eller datafeil, mens CachedAliasCount og ResolvedAliasCount eksponerer øktens størrelse
IXLSReportDataView.TryGetValue slår opp én navngitt verdi uten å utløse unntak, som supplement til de indekserte aksessorene Count, Names og Values
Relasjoner og trege tabellkombinatorer
TXLSReportRowIndexes og TXLSReportRelationIndex beholder underordnede radnumre i bøtter med sammensatt nøkkel; bruk FindChildRows eller CreateChildCursor og inspiser BucketCount eller IndexedRowCount
TXLSReportAggregateKind, TXLSReportAggregate og TXLSReportJoinKind konfigurerer TXLSReportTableFactory, hvis radfiltre sammenligner gjennom TXLSReportFilterOperator (xrfoEqual, xrfoNotEqual, xrfoGreater, xrfoGreaterEqual, xrfoLess, xrfoLessEqual, xrfoContains, xrfoStartsWith, xrfoEndsWith)
| Aggregatdefinisjoner | CountAggregate, MinAggregate og Aggregate |
| Projeksjon og reduksjon | Top, Columns, NRows og Min |
| Komposisjon | Union, Join og Split returnerer trege visninger uten å kopiere komplette mellomraddata |
Navngitte og eksplisitte områdebånd
TXLSReportBandKind velger rad-, kolonne- eller krysstabellutvidelse, og TXLSReportBandState rapporterer livssyklustilstanden klar, kjører, fullført, fullført med feil, avbrutt eller feilet
TXLSCompiledReportBand godtar et navngitt definert navn med eksakt omfang eller CreateForRange, og utvider deretter gjennom Run-overbelastningene; DefinedName, ScopeSheetIndex, Kind, Sheet, SheetIndex, FirstRow, FirstCol, LastRow, LastCol, TargetCount og State eksponerer den kompilerte planen
EmptyBandPolicy (type TXLSEmptyBandPolicy) styrer hva båndet gjør med malradene sine når datasettet er tomt — xreKeepTemplate lar radene være i fred, xreClearTemplate tømmer båndcellene inkludert plassholdere, og xreDeleteTemplate sletter malradene — og DeleteLastRow fjerner de siste BandHeight radene av den utvidede blokken etter at kopiene er på plass, slik at etterfølgende separatorrader i X-området kollapser
FixedBand gjør at radbånd overskriver radene under malen i stedet for å sette inn nye, slik at omgivende innhold beholder en fast posisjon
TXLSCompiledTableReportBand.Run utvider én Excel-tabell-radmal samtidig som tabellmetadataene bevares; inspiser TableName, Sheet, SheetIndex, ExcelTable, TemplateRow og State, og konfigurer de samme V2-bildeegenskapene som områdebåndene eksponerer
Område- og Excel-tabellbånd deler ErrorMode, StrictDataAccess, RuntimeLimits og uforanderlige LastResult-øyeblikksbilder; xremWriteAndContinue skriver bare eksplisitte gjenopprettbare cellefeil som litteral diagnostikk, registrerer kilderaden BandInputRow og faktiske utdatokoordinater, og fortsetter med senere mål og rader, mens strukturelle feil, avbrytelser, ressursgrenser, callbacks og rollback-feil forblir fatale
TXLSCompiledSheetReportBand.Run oppretter ark per post ved hjelp av NameColumn, NamePrefix og DeleteTemplateAfterRun; TXLSCompiledOverflowReportBand.Run oppretter fortsettelsesark ved hjelp av NamePrefix og DeleteTemplateAfterRun
Hele arbeidsbokmaler
TXLSReportTemplateTarget og TXLSReportTemplateTargets velger celler, kommentarer, hyperkoblinger, figurer, topp- og bunntekster, arknavn, definerte navn og dokumentegenskaper
TXLSCompiledReportTemplate.Compile fanger mål og uttrykk, Analyze returnerer adresserte TXLSReportIssues, Run-overbelastningene bruker verdier, og WriteDiagnostics skriver problemer til et regneark; TargetAreas, TargetCount og UserTableCount beskriver den kompilerte flaten og de registrerte brukertabellene
ProcessStructuralDirectives (standard True) gjør at malens Run utfører de strukturelle direktivene {{#delete}} og {{#format}} etter at verdimålene er brukt — TXLSReportDirectiveProcessor bak den tolker områdene, bruker dem og rapporterer hvor mange den håndterte gjennom AppliedCount — og CreateEncrypted åpner en kryptert mal med passordet sitt og kompilerer den, samtidig som arbeidsboken holdes tilgjengelig via Workbook-egenskapen
TXLSReportIssueKind, TXLSReportIssue og TXLSReportIssues identifiserer feilformet, manglende, ugyldig, ukjent eller syklisk plassholderinnhold med mål- og cellekoordinater
Inkluderinger, bilder og formatering
IXLSReportIncludeResolver.Resolve leverer navngitte fragmenter, og flagget Immutable tillater trygg gjenbruk; TXLSReportIncludeLibrary gir Add, Remove, Clear, Freeze, Resolve, Count og Immutable
IXLSReportImageProvider.TryGetImage returnerer en TXLSReportImageValue konfigurert av TXLSReportImageFit; TXLSReportMissingImagePolicy styrer manglende ressurser, mens TXLSReportImageBinder.Apply, ApplyTarget, MissingPolicy og ClearDirectiveCell oppdaterer eksakte bildedirektiver
TXLSReportImageBinder.ApplyTargetV2 binder én direktivcelle gjennom V2-leverandørkontrakten og videresender en TXLSReportTransformImageEvent som kan omskrive den løste nyttelasten før den lander; den løste plassholderen er selv en TXLSReportEvaluatedTarget hvis TXLSReportEvaluatedTargetKind skiller mellom xretNone, xretText, xretValue og xretFormula; IXLSReportImageCancellation.IsCancellationRequested lar langvarige leverandører observere en kooperativ avbryting
IXLSReportImageDataProviderV2.GetImage mottar en TXLSReportImageRequest med stabil regnearkidentitet, kompilert mål, bånd- og tabellnavn, logiske og markørbaserte rader, en skrivebeskyttet visning av gjeldende rad, direktiv- og ankerceller, måldimensjoner og forskyvninger i EMU, samt IXLSReportImageCancellation
TXLSReportImageResult bærer en TXLSReportImagePayload hvis Kind (TXLSReportImagePayloadKind) velger xripMissing, bytes eller en strøm, med strømmens levetid deklarert av TXLSReportImageStreamOwnership: xrisoBorrowed-strømmer forblir eid av den som kaller, og gjenoppretter posisjonen sin når de kan søkes i, mens xrisoTransferred-strømmer frigjøres nøyaktig én gang; valgfrie SourceWidth, SourceHeight, SourceDpiX og SourceDpiY bekrefter eller overstyrer kildens fysiske geometri
xrifNatural bruker kildens fysiske størrelse, xrifContain skalerer og sentrerer innenfor målramen, xrifCover fyller rammen med symmetrisk beskjæring av kilden, og xrifStretch fyller den uten å bevare sideforholdet; PNG-, JPEG-, GIF-, BMP-, EMF- og WMF-geometri leses fra avgrensede headere uten å dekode piksler
OnTransformImage kjører etter at leverandørdataene er avbildet og før regnearket endres; MaximumImageBytes har standardverdien 64 MiB, og nyttelastsignaturer, geometriheadere, dimensjons- og DPI-par, grenser for rasterside og piksler, ankere og rutenettokoordinater valideres før binding
TXLSXImage.OffsetXEMU og OffsetYEMU beholder et bildeposisjon inne i cellen eller det absolutte ankeret gjennom XLSX- og ODS-roundtrips
TXLSReportDynamicFormat og TXLSReportFormatEvent lar en kjøring bruke tallformater, radhøyder og kolonnebredder per mål
Gjenbrukbar utførelse
TXLSReportRunPhase, TXLSReportRunState, TXLSReportRunProgress og TXLSReportRunProgressEvent beskriver fremdrift og avbrytingsgrenser
TXLSCompiledReportRunner eksponerer Run, RunToStream, RunToFile, RunToEncryptedFile og Cancel, med ReportTemplate, State, Progress, OnProgress og OnFormat som styrer gjenbrukbar utførelse; mislykket validering utløser EXLSReportData før deterministiske skrivinger
ErrorMode (type TXLSReportErrorMode) har standardverdien xremStop; xremWriteAndContinue håndterer bare eksplisitte EXLSReportRecoverableData-feil og resolverens DataError-resultater, registrerer ordnede uforanderlige problemer i LastResult (en IXLSReportRunResult som eksponerer State, AppliedCount, IssueCount, indekserte Issues og FailureClassName / FailureMessage for en fatal feil) hvis TXLSReportRuntimeIssue-øyeblikksbilder eksponerer sin Category (en TXLSReportRuntimeIssueCategory: xrricDataAccess, xrricProvider eller xrricExpression) og rapporterer TargetIndex, SheetName, Col og om problemet allerede var WasWritten til utdata, og avslutter som xrrsCompletedWithErrors
TXLSReportRuntimeLimits.Defaults tillater 100 000 beholdte problemer, 512 tegn per sanitert melding og 16 MiB problemminne; tilordne en positiv egendefinert RuntimeLimits-post før en kjøring, og la RuntimeDiagnosticsSheetName være tom med mindre ett strukturert diagnostikkregneark kreves
Gjenopprettbare celleverdier og formler blir til litteral tekst [Report error CODE] message, trygge mål utenfor celler beholder opprinnelig verdi, og et valgfritt diagnostikkregneark merker de strukturerte problemene som skrevet; feil i arknavn og formler for definerte navn stopper alltid, fordi de kan endre arbeidsbokens struktur
Datafeil deklarert av resolvere, divisjon med null i uttrykk og ugyldige regulære uttrykk bruker stabile leverandør- eller uttrykkategorier; kastede resolverunntak og alle callback-, avbrytings-, ressursgrense-, rollback-, serialiserings-, sikkerhets- og strukturelle feil forblir fatale
RunToStream, RunToFile og RunToEncryptedFile iscenesetter serialiseringen inne i samme levetid for kjøring og datasession, og publiserer deretter én gang; enhver fatal, avbrutt, serialiserings-, delvis strømskrive- eller erstatningsfeil på målstedet bevarer det fullstendige tidligere målet og frigjør midlertidig lagring før retur
En ikke-tom utdatastrøm må kunne leses, skrives, endre størrelse og søkes i, slik at rollback kan gjenopprette opprinnelige bytes, størrelse og posisjon; øyeblikksbilder opp til 8 MiB beholdes i minnet, og større øyeblikksbilder bruker administrert midlertidig lagring, mens en vellykket commit etterlater strømmen posisjonert på null
Ukryptert utdata bruker den genererte arbeidsbokens kildeformat, så en ODS-mal gir en ODS-strøm eller -fil med den nødvendige pakkemetadataen; kryptert utdata fortsetter å bruke den krypterte Office-beholderen
ImageProvider bevarer den opprinnelige kompatibilitetskontrakten; ImageProviderV2, OnTransformImage, MaximumImageBytes, MissingImagePolicy og ClearImageDirectiveCell lar en kjøring, generator, områdebånd eller Excel-tabellbånd konsumere forhåndskompilerte {{#image Key}}-mål direkte; utelates begge leverandørene, forblir disse direktivcellene uendret
AutofitMode (type TXLSReportAutofitMode) velger autotilpasning av hele arket (xramNone, xramRows, xramColumns eller xramBoth) som kjøres én gang etter at alle mål er kjørt, og AutofitAdjustment er en ekstra marginalfaktor (1.0 = ingen, 1.1 = 10 % høyere rader)
Generasjonslivssyklus og malkilder
TXLSReportLifecyclePhase identifiserer grensene for mallesing, arbeidsbokgenerering og regnearkgenerering, mens TXLSReportLifecycleOutcome skiller mellom callbacks som entres, fullføres, avbrytes og feiler
TXLSReportLifecycleContext gir den aktive arbeidsboken og regnearket, stabil regnearkidentitet, opprinnelige og gjeldende koordinater, en skrivebeskyttet IXLSReportDataView, antall mål og detaljer om den første feilen; hver entered before-hendelse får en tilhørende after-hendelse, selv når genereringen avbrytes eller feiler
TXLSCompiledReportRunner.BeforeGenerateWorkbook, AfterGenerateWorkbook, BeforeGenerateSheet og AfterGenerateSheet observerer et frossent sett med opprinnelige regneark; callback-drevne strukturendringer utløser oppfrisking av kompileringen uten å legge nyopprettede ark til den gjeldende kjøringen
TXLSReportGenerator godtar en arbeidsbok, filnavn, strøm eid av den som kaller, eller kryptert fil, og legger BeforeReadTemplate og AfterReadTemplate til genereringshendelsene; TXLSReportModificationMode velger kompatibel mutasjon på stedet eller isolert atomklon-generering. Skrivebeskyttet SourceKind (type TXLSReportTemplateSourceKind: xrtsWorkbook, xrtsFile, xrtsStream eller xrtsEncryptedFile) og TemplateWorkbook rapporterer den konfigurerte malkilden, mens ModificationMode og IncludeResolver kan settes før en kjøring
Fil- og strøm-maler bruker som standard xrmAtomicClone; søkbare inngangsstrømmer gjenoppretter sin opprinnelige posisjon, kun fremoverrettede strømmer konsumeres i avgrensede blokker, kallerstrømmer forblir åpne, og utdatastrømmer eller -filer erstattes først etter vellykket fullføring
Planlegging, kontroll og migrering
TXLSReportPaginationPlanner gir planene KeepTogether, SplitRows, MergeSimilar og BalanceColumns for faste bunntekster og balansert utdata
TXLSReportTemplateChecker gir Check, CheckBand og CheckTableBand; TXLSReportTemplateMigrator gir MigrateText og MigrateWorkbook for støttede eldre plassholderformer
Delphi-eksempel
Context := TXLSReportDataContext.Create;
Table := TXLSReportMemoryTable.Create('Orders', ['Customer', 'Amount']);
Table.AddRow(['A. Datum', 1200]);
Context.RegisterTable(Table);
Template := TXLSCompiledReportTemplate.Create(Workbook);
Template.DataContext := Context;
Runner := TXLSCompiledReportRunner.Create(Template);
try
Runner.StrictDataAccess := True;
Runner.ErrorMode := xremWriteAndContinue;
Runner.RuntimeDiagnosticsSheetName := 'Report Diagnostics';
Runner.RunToFile(Values, OutputFileName);
RunResult := Runner.LastResult;
finally
Runner.Free;
Template.Free;
Context.Free;
end;
C++Builder-eksempel
Lxreport::TXLSReportMemoryTable *tableObject = new Lxreport::TXLSReportMemoryTable(L"Orders", columns, 1); Lxreport::_di_IXLSReportTable table; tableObject->GetInterface(table); tableObject->AddRow(row, 1); context->RegisterTable(table); Lxreport::TXLSCompiledReportTemplate *reportTemplate = new Lxreport::TXLSCompiledReportTemplate(workbook); reportTemplate->DataContext = context; Lxreport::TXLSCompiledReportRunner *runner = new Lxreport::TXLSCompiledReportRunner(reportTemplate); runner->StrictDataAccess = true; runner->ErrorMode = Lxreport::xremWriteAndContinue; runner->RuntimeDiagnosticsSheetName = L"Report Diagnostics"; runner->RunToFile(values, outputFileName); Lxreport::_di_IXLSReportRunResult runResult = runner->LastResult;
Delphi-eksemplet FeatureShowcase og C++Builder-eksemplet XlsxFeatureGallery inneholder fullstendige kjørbare versjoner som verifiserer completed-with-errors-tilstanden og problemtallet før kjøringen frigis