Maak, bewerk, inspecteer, bereken en exporteer Excel-workbooks rechtstreeks vanuit Delphi- of C++Builder-code. HotXLS is een native Object Pascal-spreadsheetbibliotheek met broncode voor XLS- en XLSX-workflows, ontworpen voor desktoptools, batchtaken, rapportagesystemen en server-side documentgeneratie zonder Microsoft Excel-automatisering.
Dit artikel is bedoeld voor teams generating analytical workbooks whose formulas must survive sheet movement, template changes, and user edits. Het behandelt defined names and cross-sheet formulas als productiegerichte documentengineering, niet als een losse componentaanroep.
Het praktische risico is dat cross-sheet formulas are fragile when workbook-level names, sheet-level names, external links, and range movement are not governed. Daarom heeft de workflow een geschreven contract, observeerbare diagnose en representatieve regressiebestanden nodig.
Architectuurbeslissingen
Use names as a stable formula interface. workbook-level versus sheet-level name scope / name syntax, collision handling, hidden names, and user-visible names
- workbook-level versus sheet-level name scope
- name syntax, collision handling, hidden names, and user-visible names
- formula references to generated ranges, moved sheets, and external workbooks
- recalculation policy after names or referenced ranges change
Implementatiepad
Resolve name scope before writing formulas. The order below keeps the workflow reviewable for Delphi and C++Builder teams.
- inventory existing names before adding generated names
- create stable names for generated ranges before writing dependent formulas
- qualify sheet-level names deliberately to avoid accidental workbook-level collisions
- update formulas after sheet insertion, deletion, or movement
- calculate and inspect formulas before delivering the workbook
Validatiebewijs
Formula evidence for maintainable workbooks. Keep these fields with the output or support record.
- name, scope, visible state, target reference, and owner profile
- formula text, resolved references, calculation result, and error state
- external-link references and whether they were preserved, updated, or blocked
- name collisions and remediation actions
Names are API surfaces inside the workbook
Defined names create a contract between formulas, templates, and generated data. Managing scope and references deliberately makes workbooks easier to maintain than hard-coded cell addresses scattered across sheets.
Implementatienotities voor productie
Behandel HotXLS: defined names and cross-sheet formulas in Delphi als een expliciet servicecontract rond de HotXLS-aanroepen, met gescheiden invoercontrole, werkmapopbouw, uitvoercontrole en supportbewijs
- Leg gegevensbron, celbereiken en uitvoerformaat vast voordat de werkmap wordt gemaakt
- Log rijenaantal, bladen, waarschuwingen en uitvoerpad in controleerbaar supportbewijs
- Plaats applicatiespecifieke details in testbare helpers in plaats van UI-events
- Open of inspecteer het opgeslagen bestand voordat het naar een ander systeem of klant gaat
Foutscenario's om te oefenen
- Een geslaagde SaveAs bewijst niet dat het zakelijke contract klopt
- Lettertypen, rechten en regionale instellingen kunnen verschillen tussen server en ontwikkelmachine
- Logs mogen geen wachtwoorden, klantgegevens of interne links onthullen
Uitgebreid Delphi-voorbeeld
Het volgende Delphi-voorbeeld toont een praktische servicegrens voor dit onderwerp en houdt beleid, logging en validatie testbaar gescheiden
procedure BuildNamedFormulaWorkbook(const OutputFile: string; const Assumptions: TAssumptionSet);
var
Wb: TXLSXWorkbook;
Inputs: IXLSWorksheet;
Summary: IXLSWorksheet;
begin
Wb := TXLSXWorkbook.Create;
try
Inputs := Wb.Sheets[0];
Inputs.Name := 'Inputs';
Summary := AddWorksheet(Wb, 'Summary');
WriteAssumptionTable(Inputs, Assumptions);
DefineWorkbookName(Wb, 'TaxRate', 'Inputs!$B$2');
DefineWorkbookName(Wb, 'DiscountRate', 'Inputs!$B$3');
Summary.Range['A1'].Value := 'Net revenue';
Summary.Range['B1'].Value := '=GrossRevenue*(1-DiscountRate)*(1-TaxRate)';
AssertRequiredNames(Wb, ['TaxRate', 'DiscountRate', 'GrossRevenue']);
Wb.Calculate;
AssertFormulaRangeHasValues(Summary, 'B1:B1');
WriteFormulaDependencyAudit(Wb);
if Wb.SaveAs(OutputFile) <> 1 then
RaiseWorkbookSaveError(OutputFile);
finally
Wb.Free;
end;
end;
Productiechecklist
- Run the workflow on an empty workbook, a normal customer workbook, and a worst-case workbook
- Open the output with the target spreadsheet application or downstream importer
- Log product version, template version, profile, row count, output path, elapsed time, and warning count
- Keep passwords, temporary files, customer data, and support bundles under explicit retention rules
- Add regression workbooks when a customer file exposes a new edge case