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 developers generating visual Excel reports, dashboards, or template-based workbooks in Delphi. Ele trata charts, images, and drawing objects como engenharia documental de produção, não como uma chamada isolada de componente.
O risco prático é que visual workbook elements fail when anchors, sheet changes, chart ranges, image DPI, and drawing identifiers are treated as decorative afterthoughts. Por isso o fluxo precisa de contrato escrito, diagnósticos observáveis e arquivos de regressão representativos.
Decisões de arquitetura
Treat drawings as workbook data. chart data range ownership and whether ranges expand with inserted rows / image source, DPI, compression, transparency, and alternate text policy
- chart data range ownership and whether ranges expand with inserted rows
- image source, DPI, compression, transparency, and alternate text policy
- object anchoring behavior when cells resize, hide, or move
- whether existing drawings are preserved, replaced, or regenerated from templates
Fluxo de implementação
Bind visuals to stable ranges and anchors. The order below keeps the workflow reviewable for Delphi and C++Builder teams.
- prepare named ranges or stable addresses before creating chart objects
- normalize image dimensions and compression before insertion
- place drawings with the intended cell anchor and movement behavior
- recalculate or refresh chart ranges after data changes
- open the workbook in the target Excel version and inspect layout at print scale
Evidências de validação
Visual-output evidence for workbook support. Keep these fields with the output or support record.
- chart type, source range, sheet name, and series count
- image dimensions, DPI, compression mode, anchor cell, and object identifier
- drawing preservation or regeneration decision for each template object
- viewer compatibility notes for Excel, LibreOffice, or downstream conversion
A chart depends on workbook structure
Charts, pictures, and shapes are connected to sheets, cell anchors, relationships, and sometimes formulas. A reliable workflow keeps those relationships stable when rows, columns, templates, or sheet order change.
Notas de implementação para produção
Trate HotXLS: charts, images, and drawing objects 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 BuildSalesDashboardWorkbook(const OutputFile, LogoFile: string; const Rows: TArray<TSalesRow>);
var
Wb: TXLSXWorkbook;
Sh: IXLSWorksheet;
RowIndex: Integer;
Row: TSalesRow;
begin
Wb := TXLSXWorkbook.Create;
try
Sh := Wb.Sheets[0];
Sh.Name := 'Dashboard';
Sh.Range['A1'].Value := 'Quarter';
Sh.Range['B1'].Value := 'Revenue';
Sh.Range['C1'].Value := 'Margin';
Sh.Range['D1'].Value := 'Pipeline';
RowIndex := 2;
for Row in Rows do
begin
Sh.Range['A' + IntToStr(RowIndex)].Value := Row.Quarter;
Sh.Range['B' + IntToStr(RowIndex)].Value := Row.Revenue;
Sh.Range['C' + IntToStr(RowIndex)].Value := Row.Margin;
Sh.Range['D' + IntToStr(RowIndex)].Value := Row.Pipeline;
Inc(RowIndex);
end;
Sh.Range['A1:D1'].ApplyBuiltinStyle(xbsTitle);
Sh.Range['A2:D' + IntToStr(RowIndex - 1)].ApplyBuiltinStyle(xbsGood);
AddColumnChart(Sh, 'A1:D' + IntToStr(RowIndex - 1), 'F3:M18');
AddImageIfPresent(Sh, LogoFile, 'F1');
WriteWorkbookAudit(Wb, 'dashboard', RowIndex - 2);
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