getActiveSheet(); //crea imagen $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing(); $drawing->setName('La Salle'); $drawing->setDescription('La Salle'); $drawing->setPath('../imagenes/logo.png'); // put your path and image here $drawing->setCoordinates('A1'); $drawing->setHeight(100); $drawing->setOffsetX(10); //agrega imagen $drawing->setWorksheet($spreadsheet->getActiveSheet()); extract($_POST); $row = 6; $sábado = $sábado == 'true'; $sheet->setCellValue("A$row", 'Hora'); $sheet->setCellValue("B$row", 'Lunes'); $sheet->setCellValue("C$row", 'Martes'); $sheet->setCellValue("D$row", 'Miércoles'); $sheet->setCellValue("E$row", 'Jueves'); $sheet->setCellValue("F$row", 'Viernes'); if ($sábado) $sheet->setCellValue("G$row", 'Sábado'); // to this row set bold, font size 12 and Indivisa Sans, and center the text, bg color to #101097, color to white, $until = $sábado ? 'G' : 'F'; $sheet->getStyle("A$row:$until$row")->getFont()->setBold(true); $sheet->getStyle("A$row:$until$row")->getFont()->setSize(15); $sheet->getStyle("A$row:$until$row")->getFont()->setName('Indivisa Display Sans'); $sheet->getStyle("A$row:$until$row")->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); $sheet->getStyle("A$row:$until$row")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER); $sheet->getStyle("A$row:$until$row")->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID); $sheet->getStyle("A$row:$until$row")->getFill()->getStartColor()->setARGB('001d68'); $sheet->getStyle("A$row:$until$row")->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_WHITE); # the first column is the hour of the day merged with 4 rows each $row++; foreach (range($min, $max) as $hour) { $sheet->setCellValue("A$row", "$hour:00"); $sheet->mergeCells("A$row:A" . ($row + 3)); for ($i = 0; $i < 4; $i++) $sheet->getRowDimension($row + $i)->setRowHeight(25); // align to center $sheet->getStyle("A$row")->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); $sheet->getStyle("A$row")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER); $sheet->getStyle("A$row")->getFont()->setBold(true); $sheet->getStyle("A$row")->getFont()->setName('Indivisa Text Sans'); $sheet->getStyle("A$row")->getFont()->setSize(12); $row += 4; } # Size columns to 30 foreach (range('A', 'G') as $column) { if ($column == 'G' && !$sábado) continue; $sheet->getColumnDimension($column)->setWidth(($column == 'A' ? 10 : 30)); } # foreach horarios $row = 7; $días = ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado']; $lista_minutos = ['00', '15', '30', '45']; foreach (json_decode($horarios) as $horario) { [$hora, $minutos] = array_map(fn($x) => intval($x), explode(':', $horario->hora)); $rowHora = $row + ($hora - $min) * 4; $rowHora += array_search($minutos, $lista_minutos); $colHora = array_search($horario->dia, $días) + 2; $content = new \PhpOffice\PhpSpreadsheet\RichText\RichText(); $content->createText("$horario->hora"); // $content = "$horario->hora $horario->materia\n$horario->salon\n$horario->profesor"; $content->createTextRun(" $horario->materia\n")->getFont()->setBold(true)->setName('Indivisa Text Sans')->setSize(12); $content->createTextRun("Salón: $horario->salon\n")->getFont()->setBold(true); foreach ($horario->profesores as $profesor) $content->createTextRun("🎓 $profesor->profesor\n")->getFont()->setBold(true); // APPLY THE FONT FAMILY $sheet->setCellValueByColumnAndRow($colHora, $rowHora, $content); $sheet->getStyleByColumnAndRow($colHora, $rowHora)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); $sheet->getStyleByColumnAndRow($colHora, $rowHora)->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER); // merge cells $sheet->mergeCellsByColumnAndRow($colHora, $rowHora, $colHora, $rowHora + $horario->bloques - 1); // set border white $sheet->getStyleByColumnAndRow($colHora, $rowHora)->getBorders()->getOutline()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); $sheet->getStyleByColumnAndRow($colHora, $rowHora)->getBorders()->getOutline()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_WHITE); // set bg color d4d9dd $sheet->getStyleByColumnAndRow($colHora, $rowHora)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID); $sheet->getStyleByColumnAndRow($colHora, $rowHora)->getFill()->getStartColor()->setARGB('d4d9dd'); // set font size 12 $sheet->getStyleByColumnAndRow($colHora, $rowHora)->getFont()->setSize(12); // set font name Indivisa Text Sans $sheet->getStyleByColumnAndRow($colHora, $rowHora)->getFont()->setName('Indivisa Text Sans'); // set font color 001d68z $sheet->getStyleByColumnAndRow($colHora, $rowHora)->getFont()->getColor()->setARGB('001d68'); // wrap text $sheet->getStyleByColumnAndRow($colHora, $rowHora)->getAlignment()->setWrapText(true); // border white $sheet->getStyleByColumnAndRow($colHora, $rowHora)->getBorders()->getOutline()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN); $sheet->getStyleByColumnAndRow($colHora, $rowHora)->getBorders()->getOutline()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_WHITE); } #$writer = new Xlsx($spreadsheet); $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx'); # $writer->save('asistencias.xlsx'); // download header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="asistencias.xlsx"'); header('Cache-Control: max-age=0'); // cache expires in 60 seconds (1 minute) header('Expires: mon 26 jul 1997 05:00:00 gmt'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Cache-Control: cache, must-revalidate'); header('Pragma: public'); $writer->save('php://output');