J'utilise la bibliothèque PHPExcel pour générer des données Excel basées sur la base de données mysql. La requête MySql entraîne les 1 34 000 lignes. Et Excel prend en charge 65 536 lignes sur une feuille de calcul. Donc rendu logique commeÉchec de l'exportation PHPExcel pour les fichiers volumineux
foreach($result as $value) { $val = array_values($value); if($rowscounter < 65000) { $objPHPExcel->addRow($val,$rowscounter); } else { $active_sheet++; $objPHPExcel->createSheet(); $objPHPExcel->setActiveSheetIndex($active_sheet); $rowscounter = 1; } $rowscounter++; } // deliver header header("Content-Type: $mtype; charset=" . $objPHPExcel->sEncoding); header("Content-Type:application/octet-stream"); header("Content-Disposition: inline; filename=\"" . $filename . ".$ext\""); // Save it as an excel 2003 file $objWriter = IOFactory::createWriter($objPHPExcel,$objPHPExcel->sFileFormat); //echo "Peak memory usage: " . (memory_get_peak_usage(true)/1024/1024) . " MB";exit; $objWriter->save('php://output');
pour créer une nouvelle feuille de calcul après que 65000 enregistrements ont été atteints pour une feuille de travail.
Mais cela ne fonctionne pas; ne donne aucune sortie ou erreur. Au départ, je pensais que c'était à cause de la limite de la mémoire. Mais quand il fait écho, il montre la mémoire de pointe à 1400,5 Mo et j'ai fixé ma limite de mémoire jusqu'à 3500 Mo en utilisant ini_set('memory_limit', '3500M');
Pourriez-vous s'il vous plaît suggérer quelque chose ou une alternative?
Pouvez-vous décrire les modifications que vous avez apportées à PHPExcel? Vous référencez des méthodes telles que $ objPHPExcel-> addRow() (que je m'attendrais à associer à une feuille de calcul plutôt qu'à un classeur) et des propriétés comme $ objPHPExcel-> sFileFormat qui ne font pas partie du code de la bibliothèque PHPExcel. –
Avez-vous essayé le débogage pour déterminer s'il échoue dans la boucle foreach() ou lorsque vous essayez d'écrire le fichier? –
Oui Mark, $ objPHPExcel-> addRow() est ma fonction qui n'est autre que uses -> getActiveSheet() -> setCellValueByColumnAndRow(); –