// export-excel.js async function handleExportExcel() { try { const enabledSensors = await getEnabledSensorsForExport(); console.log("[MOCK] Iniciando generación de reporte Excel..."); // 1. Crear un nuevo libro de trabajo (Workbook) en blanco const workbook = XLSX.utils.book_new(); // Definimos los sensores y el nombre que tendrá cada pestaña en el Excel const sensors = [ { id: 'rtd', sensorId: 'temperature', sheetName: 'Temperatura_RTD' }, { id: 'ph', sensorId: 'ph', sheetName: 'Sensor_pH' }, { id: 'do', sensorId: 'do', sheetName: 'Oxigeno_DO' }, { id: 'ec', sensorId: 'ec', sheetName: 'Conductividad_EC' } ].filter((sensor) => enabledSensors.has(sensor.sensorId)); if (sensors.length === 0) { throw new Error('No hay sensores habilitados para exportar.'); } // 2. Iterar sobre cada sensor, obtener sus datos y crear su hoja for (const sensor of sensors) { // Reutilizamos el mock de la Fase 4 const data = await fetchHistoricalData(sensor.id); if (!Array.isArray(data) || data.length === 0) { throw new Error(`No hay datos históricos para ${sensor.sheetName}.`); } // SheetJS convierte automáticamente un array de objetos JSON a una hoja de cálculo const worksheet = XLSX.utils.json_to_sheet(data); // Ajustar el ancho de las columnas para que se lea mejor el Timestamp const wscols = [ { wch: 30 }, // Ancho para la columna Timestamp { wch: 15 }, // Ancho para la columna Sensor { wch: 15 } // Ancho para la columna Valor ]; worksheet['!cols'] = wscols; // Añadir la hoja al libro de trabajo XLSX.utils.book_append_sheet(workbook, worksheet, sensor.sheetName); } // 3. Forzar la descarga del archivo binario .xlsx const fileName = `Reporte_Bioreactor_${new Date().getTime()}.xlsx`; XLSX.writeFile(workbook, fileName); console.log("[EXITO] Archivo Excel multihabitación descargado correctamente."); } catch (error) { console.error("[ERROR] Fallo al exportar el Excel:", error); alert("Hubo un error al generar el Excel. Revisa la consola."); } }