mejoras excel, ajustes pd
This commit is contained in:
parent
287bc16819
commit
8c3c93d087
@ -68,7 +68,6 @@
|
||||
<th class="tablaAzul text-white font-bold">Código de cronograma</th>
|
||||
<th class="tablaAzul text-white font-bold">Etapa del Servicio</th>
|
||||
<th class="tablaAzul text-white font-bold">Nombre sistema</th>
|
||||
<th class="tablaAzul text-white font-bold">Nombre sistema</th>
|
||||
<th class="tablaAzul text-white font-bold">Nombre localidad</th>
|
||||
<th class="tablaAzul text-white font-bold">Tipo de inversión</th>
|
||||
<th class="tablaAzul text-white font-bold">Código de glosa PD</th>
|
||||
@ -93,7 +92,6 @@
|
||||
<td>{{ product.codigoCronogramaAjuste }}</td>
|
||||
<td>{{ product.tipoCarga }}</td>
|
||||
<td>{{ product.estadoRevision }}</td>
|
||||
<td>{{ product.estadoRevision }}</td>
|
||||
<td>{{ product.fechaIngreso }}</td>
|
||||
<td>{{ product.estadoRevision }}</td>
|
||||
<td>{{ product.dato9 }}</td>
|
||||
|
||||
@ -103,21 +103,28 @@ export class AjustePdComponent {
|
||||
dato14: 'green',
|
||||
},
|
||||
];
|
||||
|
||||
/**
|
||||
* Exporta los datos de la tabla a Excel con estilos en los encabezados
|
||||
* @param table Tabla PrimeNG a exportar
|
||||
*/
|
||||
* Exporta los datos de la tabla a Excel con estilos en los encabezados
|
||||
* @param table Tabla PrimeNG a exportar
|
||||
*/
|
||||
exportExcelWithStyles(table: Table): void {
|
||||
// Creamos un nuevo libro de trabajo
|
||||
const workbook = new Workbook();
|
||||
const worksheet = workbook.addWorksheet('Datos');
|
||||
|
||||
// Obtenemos los datos y los cabeceros
|
||||
// Obtenemos los datos
|
||||
const data = table.filteredValue || table.value;
|
||||
|
||||
// Añadimos la fila de encabezados agrupados
|
||||
this.addGroupedHeaders(worksheet);
|
||||
|
||||
// Añadimos la fila de encabezados detallados
|
||||
const headers = this.getHeaders();
|
||||
worksheet.addRow(headers);
|
||||
|
||||
// Añadimos los datos a la hoja
|
||||
this.populateWorksheet(worksheet, headers, data);
|
||||
this.populateWorksheet(worksheet, data);
|
||||
|
||||
// Aplicamos estilos a los encabezados
|
||||
this.styleHeaders(worksheet);
|
||||
@ -129,6 +136,50 @@ export class AjustePdComponent {
|
||||
this.saveExcelFile(workbook);
|
||||
}
|
||||
|
||||
/**
|
||||
* Añade la fila de encabezados agrupados
|
||||
*/
|
||||
private addGroupedHeaders(worksheet: any): void {
|
||||
// Añadir fila de encabezados agrupados
|
||||
const groupHeaderRow = worksheet.addRow([
|
||||
'', '', '', '', '', '', '', '', '', '',
|
||||
'Cronograma base vigente', '', '',
|
||||
'Cronograma base ajustado', '', '', '',
|
||||
'', ''
|
||||
]);
|
||||
|
||||
// Combinar celdas para los grupos de encabezados
|
||||
worksheet.mergeCells(1, 11, 1, 13); // Cronograma base vigente (columnas 11-13)
|
||||
worksheet.mergeCells(1, 14, 1, 17); // Cronograma base ajustado (columnas 14-17)
|
||||
|
||||
// Dar formato a las celdas combinadas
|
||||
groupHeaderRow.getCell(11).fill = {
|
||||
type: 'pattern',
|
||||
pattern: 'solid',
|
||||
fgColor: { argb: '0066CC' } // Color azul oscuro para "Cronograma base vigente"
|
||||
};
|
||||
groupHeaderRow.getCell(14).fill = {
|
||||
type: 'pattern',
|
||||
pattern: 'solid',
|
||||
fgColor: { argb: '0000CC' } // Color azul más fuerte para "Cronograma base ajustado"
|
||||
};
|
||||
|
||||
// Estilo de texto para encabezados agrupados
|
||||
[11, 14].forEach(cellIndex => {
|
||||
const cell = groupHeaderRow.getCell(cellIndex);
|
||||
cell.font = {
|
||||
name: 'Arial',
|
||||
size: 12,
|
||||
bold: true,
|
||||
color: { argb: 'FFFFFF' } // Texto blanco
|
||||
};
|
||||
cell.alignment = {
|
||||
horizontal: 'center',
|
||||
vertical: 'middle'
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Devuelve los cabeceros para el archivo Excel
|
||||
*/
|
||||
@ -138,35 +189,50 @@ export class AjustePdComponent {
|
||||
'Código de cronograma',
|
||||
'Etapa del Servicio',
|
||||
'Nombre sistema',
|
||||
'Nombre localidad',
|
||||
'Tipo de inversión',
|
||||
'Código de glosa PD',
|
||||
'Descripción glosa',
|
||||
'Monto Inversión Total (UF)',
|
||||
'Año de Inicio',
|
||||
'Año de Término',
|
||||
'Estado aprobación'
|
||||
'Mes de Término',
|
||||
'Tipo de ajuste',
|
||||
'Año de Inicio',
|
||||
'Año de Término',
|
||||
'Mes de Término',
|
||||
'Nota',
|
||||
'Estado aprobación',
|
||||
'Observación'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Rellena la hoja con los datos de la tabla
|
||||
*/
|
||||
private populateWorksheet(worksheet: any, headers: string[], data: any[]): void {
|
||||
// Añadimos las cabeceras
|
||||
worksheet.addRow(headers);
|
||||
|
||||
private populateWorksheet(worksheet: any, data: any[]): void {
|
||||
// Añadimos los datos
|
||||
data.forEach(item => {
|
||||
worksheet.addRow([
|
||||
item.empresa,
|
||||
item.codigoCronograma,
|
||||
item.codigoCronogramaAjuste,
|
||||
item.tipoCarga,
|
||||
item.estadoRevision,
|
||||
item.analista,
|
||||
item.fechaIngreso,
|
||||
item.dato9,
|
||||
item.dato10,
|
||||
item.dato13
|
||||
item.codigoCronogramaAjuste, // Etapa del Servicio
|
||||
item.tipoCarga, // Nombre sistema
|
||||
item.estadoRevision, // Nombre localidad
|
||||
item.fechaIngreso, // Tipo de inversión
|
||||
item.estadoRevision, // Código de glosa PD
|
||||
item.dato9, // Descripción glosa
|
||||
item.dato10, // Monto Inversión Total (UF)
|
||||
item.dato13, // Año de Inicio (Cronograma base vigente)
|
||||
item.dato14, // Año de Término (Cronograma base vigente)
|
||||
item.dato15, // Mes de Término (Cronograma base vigente)
|
||||
item.dato16, // Tipo de ajuste (Cronograma base ajustado)
|
||||
item.dato17, // Año de Inicio (Cronograma base ajustado)
|
||||
item.dato18, // Año de Término (Cronograma base ajustado)
|
||||
item.dato11, // Mes de Término (Cronograma base ajustado)
|
||||
item.dato12, // Nota
|
||||
item.dato13, // Estado aprobación
|
||||
item.analista // Observación
|
||||
]);
|
||||
});
|
||||
}
|
||||
@ -175,16 +241,17 @@ export class AjustePdComponent {
|
||||
* Aplica estilos a los encabezados
|
||||
*/
|
||||
private styleHeaders(worksheet: any): void {
|
||||
const headerRow = worksheet.getRow(1);
|
||||
headerRow.height = 25;
|
||||
// Estilo para la segunda fila (encabezados detallados)
|
||||
const detailedHeaderRow = worksheet.getRow(2);
|
||||
detailedHeaderRow.height = 25;
|
||||
|
||||
headerRow.eachCell(cell => {
|
||||
detailedHeaderRow.eachCell(cell => {
|
||||
// Estilo de texto Encabezado
|
||||
cell.font = {
|
||||
name: 'Arial',
|
||||
size: 12,
|
||||
bold: true,
|
||||
color: { argb: '000000' }
|
||||
color: { argb: 'FFFFFF' } // Texto blanco
|
||||
};
|
||||
|
||||
// Bordes
|
||||
@ -200,7 +267,35 @@ export class AjustePdComponent {
|
||||
horizontal: 'center',
|
||||
vertical: 'middle'
|
||||
};
|
||||
|
||||
// Color de fondo para encabezados normales
|
||||
cell.fill = {
|
||||
type: 'pattern',
|
||||
pattern: 'solid',
|
||||
fgColor: { argb: '0066CC' } // Color azul por defecto
|
||||
};
|
||||
});
|
||||
|
||||
// Aplicar colores específicos según el grupo de encabezados
|
||||
// Cronograma base ajustado (columnas 14-17)
|
||||
for (let i = 14; i <= 17; i++) {
|
||||
const cell = detailedHeaderRow.getCell(i);
|
||||
cell.fill = {
|
||||
type: 'pattern',
|
||||
pattern: 'solid',
|
||||
fgColor: { argb: '0000CC' } // Azul más fuerte
|
||||
};
|
||||
}
|
||||
|
||||
// Estado aprobación y Observación (columnas 18-19)
|
||||
for (let i = 18; i <= 19; i++) {
|
||||
const cell = detailedHeaderRow.getCell(i);
|
||||
cell.fill = {
|
||||
type: 'pattern',
|
||||
pattern: 'solid',
|
||||
fgColor: { argb: '28a745' } // Color verde
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -214,7 +309,7 @@ export class AjustePdComponent {
|
||||
this.adjustColumnWidths(worksheet);
|
||||
|
||||
// Congelamos la primera fila
|
||||
worksheet.views = [{ state: 'frozen', xSplit: 0, ySplit: 1 }];
|
||||
worksheet.views = [{ state: 'frozen', xSplit: 0, ySplit: 2 }]; // Congelamos 2 filas
|
||||
}
|
||||
|
||||
/**
|
||||
@ -251,4 +346,4 @@ export class AjustePdComponent {
|
||||
})
|
||||
.catch(error => console.error('Error al exportar a Excel:', error));
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user