Artículo técnico

HotXLS: sheet listing and lightweight workbook inspection

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 that need fast workbook triage before loading formulas, styles, and cell data. Presenta sheet listing and lightweight workbook inspection como una práctica de ingeniería documental para producción, no como una llamada aislada al componente.

El riesgo principal es que opening full workbook content just to list sheets wastes time and memory, and it can expose unsupported features too late in the process. Por eso el flujo necesita contrato escrito, diagnósticos observables y archivos de regresión reales.

Decisiones de arquitectura

Inspect package facts before full parsing. which facts are required before full workbook load / handling for hidden sheets, very hidden sheets, chart sheets, and unsupported sheet types

  • which facts are required before full workbook load
  • handling for hidden sheets, very hidden sheets, chart sheets, and unsupported sheet types
  • maximum package size, sheet count, and intake timeout
  • routing rules for files that only need metadata versus full calculation

Flujo de implementación

Use sheet inventory as an intake gate. The order below keeps the workflow reviewable for Delphi and C++Builder teams.

  1. open the workbook in an inspection path that avoids unnecessary cell materialization
  2. read format, package metadata, sheet list, visibility, and rough dimensions
  3. classify the workbook as preview, audit, convert, reject, or full-load
  4. show sheet inventory to operators when routing depends on workbook structure
  5. log inspection facts before deeper processing mutates state

Evidencia de validación

Inspection evidence for routing decisions. Keep these fields with the output or support record.

  • format, file size, sheet count, sheet order, visibility, and sheet type
  • metadata such as creator, modified time, and application when available
  • routing result and reason based on lightweight facts
  • warnings for encrypted, damaged, macro-enabled, or oversized packages

Triage should be cheap and trustworthy

A lightweight inspection step should capture workbook format, sheet names, visibility, order, types, dimensions when available, and package-level warnings. That information is enough to route many files before deep processing.

Notas de implementación para producción

Trata HotXLS: sheet listing and lightweight workbook inspection 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 WriteWorkbookInspectionIndex(const SourceFile, OutputFile: string);
var
  Wb: TXLSXWorkbook;
  IndexSheet: IXLSWorksheet;
  Sh: IXLSWorksheet;
  SheetIndex: Integer;
  RowIndex: Integer;
begin
  RequireFileExists(SourceFile);
  Wb := TXLSXWorkbook.Create;
  try
    Wb.Open(SourceFile);
    IndexSheet := AddWorksheet(Wb, 'Inspection Index');
    WriteHeaderRow(IndexSheet, ['No', 'Sheet', 'UsedRange', 'FormulaCells', 'Warnings']);

    RowIndex := 2;
    for SheetIndex := 0 to Wb.Sheets.Count - 1 do
    begin
      Sh := Wb.Sheets[SheetIndex];
      IndexSheet.Range['A' + IntToStr(RowIndex)].Value := SheetIndex + 1;
      IndexSheet.Range['B' + IntToStr(RowIndex)].Value := Sh.Name;
      IndexSheet.Range['C' + IntToStr(RowIndex)].Value := GetUsedRangeAddress(Sh);
      IndexSheet.Range['D' + IntToStr(RowIndex)].Value := CountFormulaCells(Sh);
      IndexSheet.Range['E' + IntToStr(RowIndex)].Value := BuildSheetWarnings(Sh);
      Inc(RowIndex);
    end;

    AddAutoFilterToHeader(IndexSheet, 'A1:E' + IntToStr(RowIndex - 1));
    WriteInspectionAudit(Wb, SourceFile, RowIndex - 2);

    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

Product documentation

HotXLS Component