import { Result } from '@hannndler/core'; import { IWorksheet, IWorksheetConfig, ITable, IWorksheetImage, IExcelTable, IPivotTable, ISlicer, IWatermark, IDataConnection } from '../types/worksheet.types'; import { IDataCell, IHeaderCell, IFooterCell, ICellRange } from '../types/cell.types'; import { IBuildOptions } from '../types/builder.types'; /** * Worksheet - Representa una hoja de cálculo dentro del builder * Adaptado para usar tipos compartidos de han-documents-core */ import * as ExcelJS from 'exceljs'; /** * Worksheet - Representa una hoja de cálculo dentro del builder * 2 * Soporta headers, subheaders anidados, rows, footers, children y estilos por celda. */ export declare class Worksheet implements IWorksheet { config: IWorksheetConfig; tables: ITable[]; currentRow: number; currentCol: number; headerPointers: Map; isBuilt: boolean; private headers; private subHeaders; private body; private footers; private images; private rowGroups; private columnGroups; private namedRanges; private excelTables; private hiddenRows; private hiddenColumns; private pivotTables; private slicers; private watermarks; private dataConnections; private customStyles?; private theme?; constructor(config: IWorksheetConfig); /** * Agrega un header principal */ addHeader(header: IHeaderCell): this; /** * Agrega subheaders (ahora soporta anidación) */ addSubHeaders(subHeaders: IHeaderCell[]): this; /** * Agrega una fila de datos (puede ser jerárquica con childrens) */ addRow(row: IDataCell[] | IDataCell): this; /** * Agrega un footer o varios */ addFooter(footer: IFooterCell[] | IFooterCell): this; /** * Crea una nueva tabla y la agrega al worksheet */ addTable(tableConfig?: Partial): this; /** * Finaliza la tabla actual agregando todos los elementos temporales a la última tabla */ finalizeTable(): this; /** * Obtiene una tabla por nombre */ getTable(name: string): ITable | undefined; /** * Agrega una imagen al worksheet */ addImage(image: IWorksheetImage): this; /** * Agrupa filas (crea esquema colapsable) */ groupRows(startRow: number, endRow: number, collapsed?: boolean): this; /** * Agrupa columnas (crea esquema colapsable) */ groupColumns(startCol: number, endCol: number, collapsed?: boolean): this; /** * Agrega un rango con nombre */ addNamedRange(name: string, range: string | ICellRange, scope?: string): this; /** * Agrega una tabla estructurada de Excel */ addExcelTable(table: IExcelTable): this; /** * Oculta filas */ hideRows(rows: number | number[]): this; /** * Muestra filas */ showRows(rows: number | number[]): this; /** * Oculta columnas */ hideColumns(columns: number | string | (number | string)[]): this; /** * Muestra columnas */ showColumns(columns: number | string | (number | string)[]): this; /** * Agrega una tabla dinámica (pivot table) */ addPivotTable(pivotTable: IPivotTable): this; /** * Agrega un slicer a una tabla o tabla dinámica */ addSlicer(slicer: ISlicer): this; /** * Agrega una marca de agua al worksheet */ addWatermark(watermark: IWatermark): this; /** * Agrega una conexión de datos */ addDataConnection(connection: IDataConnection): this; /** * Construye la hoja en el workbook de ExcelJS */ build(workbook: ExcelJS.Workbook, _options?: IBuildOptions): Promise; /** * Construye una tabla individual en el worksheet */ private buildTable; /** * Construcción tradicional para compatibilidad hacia atrás */ private buildLegacyContent; /** * Calcula el número máximo de columnas para una tabla */ private calculateTableMaxColumns; /** * Aplica el estilo de tabla a un rango específico */ private applyTableStyle; /** * Construye headers anidados recursivamente * @param ws - Worksheet de ExcelJS * @param startRow - Fila inicial * @param headers - Array de headers a procesar * @returns La siguiente fila disponible */ private buildNestedHeaders; /** * Obtiene información del header en una profundidad específica */ private getHeaderAtDepth; /** * Aplica todos los merges (horizontales y verticales) después de crear todas las filas */ private applyAllMerges; /** * Aplica merges inteligentes basados en la estructura de headers */ private applySmartMerges; /** * Aplica merges inteligentes para un header específico */ private applySmartMergesForHeader; /** * Calcula el span de columnas para un header */ private calculateHeaderColSpan; /** * Obtiene la profundidad máxima de headers anidados */ private getMaxHeaderDepth; /** * Obtiene el número máximo de columnas */ private getMaxColumns; /** * Valida la hoja */ validate(): Result; /** * Calcula las posiciones de columnas para los datos basándose en la estructura de subheaders. * Soporta múltiples niveles de anidación (children dentro de children). */ private calculateDataColumnPositions; /** * Agrega una fila de footer * @returns el siguiente rowPointer disponible */ private addFooterRow; /** * Aplica width y height a una celda/fila */ private applyCellDimensions; /** * Aplica comentario a una celda */ private applyCellComment; /** * Aplica validación de datos a una celda */ private applyDataValidation; /** * Aplica formato condicional a una celda */ private applyConditionalFormatting; /** * Aplica filtro automático a una tabla */ private applyAutoFilter; /** * Aplica filtro automático a nivel de worksheet */ private applyWorksheetAutoFilter; /** * Procesa el valor de una celda considerando links y máscaras * Si el tipo es LINK o hay un link, crea un hipervínculo en Excel */ private processCellValue; /** * Agrega una fila de datos y sus children recursivamente * @returns el siguiente rowPointer disponible */ private addDataRowRecursive; /** * Merge helper that avoids attempting to merge a range that's already merged. */ private safeMerge; /** * Convierte un color a formato ExcelJS (ARGB) */ private convertColor; /** * Calcula cuántas filas ocupará una celda considerando children y jumps. */ private calculateRowSpan; /** * Busca recursivamente una celda (por key) dentro de una definición de fila/header/footer */ private findCellInRow; /** * Convierte el estilo personalizado a formato compatible con ExcelJS */ private convertStyle; /** * Convierte un número de columna a letra (1 = A, 2 = B, etc.) */ private numberToColumnLetter; /** * Convierte letra de columna a número (A = 1, B = 2, etc.) */ private columnLetterToNumber; /** * Aplica una imagen al worksheet */ private applyImage; /** * Aplica agrupación de filas */ private applyRowGrouping; /** * Aplica agrupación de columnas */ private applyColumnGrouping; /** * Aplica una tabla estructurada de Excel */ private applyExcelTable; /** * Aplica configuración avanzada de impresión */ private applyAdvancedPrintSettings; /** * Aplica filas y columnas ocultas */ private applyHiddenRowsColumns; /** * Aplica una tabla dinámica (pivot table) */ private applyPivotTable; /** * Convierte un color a formato ExcelJS */ private convertColorToExcelJS; /** * Aplica views (freeze panes, split panes, sheet views) */ private applyViews; /** * Obtiene un estilo predefinido del workbook */ private getPredefinedStyle; /** * Obtiene un estilo del tema para una sección específica */ private getThemeStyle; /** * Aplica un slicer a una tabla o tabla dinámica */ private applySlicer; /** * Aplica una marca de agua al worksheet */ private applyWatermark; /** * Aplica una conexión de datos */ private applyDataConnection; } //# sourceMappingURL=Worksheet.d.ts.map