PHPExcel à l'Exportation pour les gros Fichiers échoue
Je suis à l'aide de la bibliothèque PHPExcel pour générer des données excel basé sur mysql datbase. MySql résultats de la requête dans le 1,34,000 lignes. Et Excel prend en charge 65 536 Lignes sur une feuille de calcul. Ainsi fait logique comme
foreach($result as $valeur) { $val = array_values($valeur); if($rowscounter < 65000) { $objPHPExcel->addRow($val,$rowscounter); } d'autre { $active_sheet++; $objPHPExcel->createSheet(); $objPHPExcel->setActiveSheetIndex($active_sheet); $rowscounter = 1; } $rowscounter++; } //livrer en-tête header("Content-Type: $mtype; charset=" . $objPHPExcel->sEncoding); header("Content-Type:application/octet-stream"); header("Content-Disposition: inline; filename=\"" . $filename . ".$ext\""); //L'enregistrer comme un fichier excel 2003 $objWriter = IOFactory::createWriter($objPHPExcel,$objPHPExcel->sFileFormat); //echo "utilisation maximale de la mémoire:" . (memory_get_peak_usage(true) /1024 /1024) . "MO";exit; $objWriter->save('php://output');
de créer de nouveaux feuille de calcul après 65000 enregistrements sont atteint pour un woeksheet.
Mais il ne fonctionne pas; ne pas donner toute sortie ou d'erreur. J'ai d'abord pensé que sa en raison de la limite de mémoire. Mais quand l'écho il montre maximale de la mémoire à 1400.5 MO et j'ai mis ma limite de mémoire jusqu'à 3500MB à l'aide de ini_set('memory_limit', '3500M');
Pourriez-vous s'il vous plaît suggérer quelque chose ou de tout autre?
Avez-vous essayé de débogage pour déterminer si c'est de la faute dans le foreach() en boucle, ou lorsque vous essayez d'écrire le fichier?
Oui Marc, $objPHPExcel->addRow() est ma fonction qui n'est rien mais utilise ->getActiveSheet()->setCellValueByColumnAndRow();
Oui $objPHPExcel->sFileFormat ne fait pas partie de PHPExcel. Son de la variable personnalisée. Et code ci-dessus fonctionne parfaitement pour 10 000 enregistrements.
Vous pensez que ce n'est pas de la mémoire - même si ma règle d'or de l'estimation est de 1k par cellule (colonnes x lignes) * 2 + 25MO - mais d'autres possibilités consistent à frapper d'un dépassement de limite.
OriginalL'auteur Asif Mulla | 2010-10-08
Vous devez vous connecter pour publier un commentaire.
Vous pourriez être en dépassement de la limite de 65 000, que pensez-vous de définir l' $rowscounter valeur initiale? 1 ou 0 (zéro)? La raison pour laquelle je demande que les résultats tableau commence à l'indice 0 (zéro), vous êtes en train d'ajouter la ligne, puis en incrémentant le compteur après l'ajouter. Donc, si vous démarrer le compteur à 0 (zéro) que vous pourriez avoir plus de lignes que ce que vous avez compté. Aussi il vous manque une ligne dans le else, vous parcourez une valeur, mais ne pas ajouter à la feuille de
essayer cette
un exemple simple de ce que j'essaie d'expliquer, si $i est définie sur 0 (zéro), l'autre condition n'est pas remplie. Ainsi, vous aurez une ligne supplémentaire dans vos résultats. Si $i est mis à 1, l'autre condition est remplie
Trouvé un sujet intéressant à propos de PHPExcel être la question de la fuite de mémoire: phpexcel.codeplex.com/Thread/View.aspx?ThreadId=18404 elle dispose d'une solution de contournement
OriginalL'auteur Phill Pafford