Crea, modifica, ispeziona, calcola ed esporta cartelle di lavoro Excel direttamente da Delphi o C++Builder. HotXLS e una libreria nativa Object Pascal per XLS e XLSX, progettata per strumenti desktop, batch, report e generazione documenti senza automazione Microsoft Excel.
Questo articolo è rivolto a teams producing formatted workbook output that must remain editable and visually consistent. Tratta conditional formatting, rich text, and styles come ingegneria documentale di produzione, non come una semplice chiamata al componente.
Il rischio pratico è che style-heavy workbooks become slow, bloated, or visually inconsistent when every cell creates a new style or when conditional rules overlap without priority control. Per questo il flusso richiede un contratto scritto, diagnostica osservabile e file di regressione realistici.
Decisioni architetturali
Manage styles as reusable assets. style catalog, theme colors, indexed colors, fonts, borders, and number formats / conditional-rule priority, stop-if-true behavior, and target ranges
- style catalog, theme colors, indexed colors, fonts, borders, and number formats
- conditional-rule priority, stop-if-true behavior, and target ranges
- rich text runs, hyperlink styling, and localization of inline labels
- style reuse policy for generated rows and template-derived sections
Percorso di implementazione
Apply formatting through named profiles. The order below keeps the workflow reviewable for Delphi and C++Builder teams.
- define style profiles before writing large ranges
- reuse existing workbook styles when they match the intended appearance
- apply conditional rules in explicit priority order
- write rich text runs only where the mixed formatting carries meaning
- inspect style count and workbook size as part of regression testing
Evidenze di validazione
Formatting evidence for regression review. Keep these fields with the output or support record.
- style count, reused style identifiers, and newly created style profiles
- conditional rule type, priority, target range, and formula or threshold
- rich text run count, font changes, and hyperlink interactions
- visual comparison against approved template output
Workbook formatting has a cost model
Conditional formatting, rich text runs, and cell styles are workbook resources. Reusing styles and explaining rule priority improves performance, file size, and long-term template maintenance.
Note di implementazione per la produzione
Tratta HotXLS: conditional formatting, rich text, and styles come un contratto di servizio esplicito attorno alle chiamate HotXLS, separando validazione dell'input, scrittura della cartella, controllo dell'output ed evidenze di supporto
- Definire origine dati, intervalli di celle e formato di output prima di creare la cartella
- Registrare righe, fogli, avvisi e percorso di output in una prova verificabile
- Incapsulare i dettagli applicativi in helper testabili invece che in eventi UI
- Riaprire o ispezionare il file salvato prima di consegnarlo a un altro sistema o al cliente
Casi di errore da provare
- Un SaveAs riuscito non prova che il contratto di business sia corretto
- Font, permessi e impostazioni locali possono variare tra server e macchina di sviluppo
- I log non devono esporre password, dati cliente o link interni
Esempio Delphi dettagliato
L'esempio Delphi seguente mostra un confine di servizio pratico per questo tema, mantenendo policy, logging e validazione in un livello testabile
procedure BuildKpiWorkbook(const OutputFile: string; const Rows: TArray<TKpiRow>);
var
Wb: TXLSXWorkbook;
Sh: IXLSWorksheet;
RowIndex: Integer;
Row: TKpiRow;
begin
Wb := TXLSXWorkbook.Create;
try
Sh := Wb.Sheets[0];
Sh.Name := 'KPI Review';
WriteHeaderRow(Sh, ['Team', 'Owner', 'Target', 'Actual', 'Status']);
RowIndex := 2;
for Row in Rows do
begin
Sh.Range['A' + IntToStr(RowIndex)].Value := Row.Team;
Sh.Range['B' + IntToStr(RowIndex)].Value := Row.Owner;
Sh.Range['C' + IntToStr(RowIndex)].Value := Row.Target;
Sh.Range['D' + IntToStr(RowIndex)].Value := Row.Actual;
Sh.Range['E' + IntToStr(RowIndex)].Value := Row.StatusText;
Inc(RowIndex);
end;
Sh.Range['A1:E1'].ApplyBuiltinStyle(xbsTitle);
ApplyCurrencyFormat(Sh, 'C2:D' + IntToStr(RowIndex - 1));
AddTrafficLightRules(Sh, 'E2:E' + IntToStr(RowIndex - 1));
AddRichTextStatusNotes(Sh, Rows, 2);
ValidateStyleBudget(Wb, 80);
if Wb.SaveAs(OutputFile) <> 1 then
RaiseWorkbookSaveError(OutputFile);
finally
Wb.Free;
end;
end;
Checklist di produzione
- 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