Cree, edite, inspeccione, calcule y exporte libros de Excel directamente desde código Delphi o C++Builder. HotXLS es una biblioteca nativa Object Pascal para XLS y XLSX, disenada para herramientas de escritorio, trabajos por lotes, informes y generacion de documentos sin automatización de Microsoft Excel.
Este artículo está dirigido a teams generating analytical workbooks whose formulas must survive sheet movement, template changes, and user edits. Presenta defined names and cross-sheet formulas como una práctica de ingeniería documental para producción, no como una llamada aislada al componente.
El riesgo principal es que cross-sheet formulas are fragile when workbook-level names, sheet-level names, external links, and range movement are not governed. Por eso el flujo necesita contrato escrito, diagnósticos observables y archivos de regresión reales.
Decisiones de arquitectura
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
Flujo de implementación
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
Evidencia de validación
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.
Notas de implementación para producción
Trata HotXLS: defined names and cross-sheet formulas in Delphi como un contrato de servicio claro alrededor de las llamadas a HotXLS, separando validación de entrada, escritura del libro, comprobación de salida y evidencias de soporte
- Define origen de datos, rangos de celdas y formato de salida antes de crear el libro
- Registra filas, hojas, advertencias y ruta de salida en una evidencia revisable
- Encapsula los detalles propios de la aplicación en helpers comprobables, no en eventos de interfaz
- Vuelve a abrir o inspecciona el archivo guardado antes de entregarlo a otro sistema o al cliente
Fallos que conviene ensayar
- Que SaveAs devuelva éxito no demuestra que el contrato de negocio siga siendo correcto
- Fuentes, permisos y configuración regional pueden cambiar entre servidor y equipo de desarrollo
- Los logs no deben exponer contraseñas, datos de clientes ni enlaces internos
Ejemplo Delphi detallado
El siguiente ejemplo Delphi muestra una frontera de servicio práctica para este tema y mantiene políticas, registro y validación en una capa comprobable
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;
Lista de salida a producción
- 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