Crie, edite, inspecione, calcule e exporte pastas Excel diretamente de codigo Delphi ou C++Builder. HotXLS e uma biblioteca nativa Object Pascal para XLS e XLSX, projetada para ferramentas desktop, lotes, relatorios e geracao de documentos sem automacao do Microsoft Excel.
Este artigo é para teams generating analytical workbooks whose formulas must survive sheet movement, template changes, and user edits. Ele trata defined names and cross-sheet formulas como engenharia documental de produção, não como uma chamada isolada de componente.
O risco prático é que cross-sheet formulas are fragile when workbook-level names, sheet-level names, external links, and range movement are not governed. Por isso o fluxo precisa de contrato escrito, diagnósticos observáveis e arquivos de regressão representativos.
Decisões de arquitetura
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
Fluxo de implementação
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
Evidências de validação
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 implementação para produção
Trate HotXLS: defined names and cross-sheet formulas in Delphi como um contrato de serviço explícito em torno das chamadas HotXLS, separando validação de entrada, gravação da pasta de trabalho, verificação da saída e evidências para suporte
- Defina fonte de dados, intervalos de células e formato de saída antes de criar a pasta de trabalho
- Registre linhas, planilhas, avisos e caminho de saída em evidências revisáveis
- Encapsule detalhes da aplicação em helpers testáveis, não em eventos de interface
- Reabra ou inspecione o arquivo salvo antes de entregá-lo a outro sistema ou ao cliente
Falhas que devem ser ensaiadas
- SaveAs com sucesso não prova que o contrato de negócio continua correto
- Fontes, permissões e configurações regionais podem variar entre servidor e máquina de desenvolvimento
- Logs não devem expor senhas, dados de clientes nem links internos
Exemplo Delphi detalhado
O exemplo Delphi a seguir mostra uma fronteira de serviço prática para este tema, mantendo política, logs e validação em uma camada testável
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;
Checklist de produção
- 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