1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$headers = ['Code', 'Message', 'Prêt', 'Tiers', 'Collateral', 'Valeur trouvée', 'Niveau Erreur', 'Type Validation', 'Date'];
$sheet->fromArray([$headers], NULL, 'A1');
$chunkSize = 500;
$row = 2;
foreach (array_chunk($erreursDetailleesTransaction, $chunkSize) as $chunk) {
$sheet->fromArray($chunk, NULL, "A$row");
$row += count($chunk);
}
// Log RAM utilisée
$used = round(memory_get_usage(true) / 1024 / 1024, 2);
$peak = round(memory_get_peak_usage(true) / 1024 / 1024, 2);
$percentUsed = round(($used / ($memoryLimit / 1024 / 1024)) * 100, 2);
$percentPeak = round(($peak / ($memoryLimit / 1024 / 1024)) * 100, 2);
file_put_contents($logFile, "[Chunk] RAM utilisée: {$used}MB ({$percentUsed}%) | Pic: {$peak}MB ({$percentPeak}%)" . PHP_EOL, FILE_APPEND);
// Styles
$headerRange = 'A1:I1';
$dataRange = 'A2:I' . (count($erreursDetailleesTransaction) + 1);
$sheet->getStyle($headerRange)->applyFromArray([
'font' => ['bold' => true, 'color' => ['rgb' => 'FFFFFF']],
'fill' => ['fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID, 'startColor' => ['rgb' => '4F81BD']],
'borders' => ['allBorders' => ['borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN]],
]);
$sheet->getStyle($dataRange)->applyFromArray([
'borders' => ['allBorders' => ['borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN]],
]);
foreach (range('A', 'I') as $col) {
$sheet->getColumnDimension($col)->setAutoSize(false);
}
$sheet->getColumnDimension('A')->setWidth(15);
$sheet->getColumnDimension('B')->setWidth(70);
$sheet->getColumnDimension('C')->setWidth(20);
$sheet->getColumnDimension('D')->setWidth(20);
$sheet->getColumnDimension('E')->setWidth(20);
$sheet->getColumnDimension('F')->setWidth(15);
$sheet->getColumnDimension('G')->setWidth(20);
$sheet->getColumnDimension('H')->setWidth(70);
$sheet->getColumnDimension('I')->setWidth(15);
$sheet->getStyle($headerRange)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$sheet->getStyle($headerRange)->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
$sheet->getStyle($dataRange)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
$sheet->getStyle($dataRange)->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
$sheet->setSelectedCell('A1');
$filePathTransaction .= '.xlsx';
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->setPreCalculateFormulas(false);
$writer->save($filePathTransaction);
$spreadsheet->disconnectWorksheets();
unset($spreadsheet, $sheet, $writer, $erreursDetailleesTransaction);
gc_collect_cycles(); |
Partager