Warum PHPExcel nicht mehr als 5000 Zeilen schreiben kann

8

Kann mir jemand sagen, warum PHPExcel nicht mehr als 5000 Zeilen erlaubt. Ich verwende ein Open-Source-PHPExcel für die Berichterstellung auf meinen Projekten und ich konnte nicht mehr als 5000 Zeilen von Daten aus Mysql-DB schreiben. Meine Ergebnismenge holt 7230 Datensätze, wenn die Abfrage ausgeführt wird. Wie repariere ich es?

    
Prabhu M 04.02.2011, 06:36
quelle

5 Antworten

15

Das ist höchstwahrscheinlich ein Timeout oder ein Speicherproblem. Das einzige PHPExcel-Limit für die Arbeitsblattgröße ist 65.536 Zeilen und 256 (IV) Spalten (bei Verwendung des Excel5 Writer); oder 1.048.576 Zeilen und 16.384 (XFD) Spalten (bei Verwendung des Excel2007 Writer).

Stellen Sie sicher, dass Ihre Fehlerprotokollierung immer aktiviert ist ... Verwenden Sie try / catch-Blöcke, um nach PHPExcel-Ausnahmen zu filtern. Und lesen Sie die PHPExcel Site-Diskussions-Threads zu Speicher und Leistung.

    
Mark Baker 04.02.2011, 08:56
quelle
9

Ich hatte das gleiche Problem. Sie müssen genügend Zeit und Speicherlimit zuweisen.

Ich habe meine Lösung auf 3 verschiedenen Servern getestet hier ist das Ergebnis:

Etwa 5000 Datensätze (12 Spalten)

Datei lesen:
09:48:22 Peak Speicherverbrauch: 1,25 MB

Daten lesen:
09:48:31 Peak Speicherverbrauch: 54,5 MB

Nach dem Indizieren von Daten in ein Array:
09:48:35 Peak Speicherverbrauch: 68,5 MB

Datensätze: 4504

Ich erhöhte den Speicher und die Zeit, um 22.000 Datensätze zu lesen, nach der Indizierung ging es bis zu 370.00 MB

Hier ist die Lösung (vorausgesetzt, dass alles andere in der Codefolge korrekt ist) Wo Sie PHPExcel in Ihrem Programm / Ihrer Funktion aufrufen:

%Vor%

Führen Sie hier alle Initialisierungen durch, damit alle Objekte bereit sind, und ordnen Sie dann Speicher zum Lesen der Datei und Indizieren von Daten in die interne Struktur des Programms zu:

%Vor%

Eine gute Idee ist es, all das durch einige Kategorien von Daten geschafft zu haben, so dass Sie 400 MB - PRONE TO ERRORS - nicht sehen!

    
Vlad 25.05.2011 09:21
quelle
2

Das ist höchstwahrscheinlich ein Timeout oder ein Speicherproblem. Das einzige PHPExcel-Limit für die Arbeitsblattgröße ist 65.536 Zeilen und 256 (IV) Spalten (bei Verwendung des Excel5 Writer); oder 1.048.576 Zeilen und 16.384 (XFD) Spalten (bei Verwendung des Excel2007 Writer).

Sie können diese Zeile ändern

%Vor%

als

%Vor%

Dann können Datensätze mehr als 65536 Zeilen geschrieben werden.

    
Shrikant Jadhav 24.07.2014 10:01
quelle
1

Ohne dass Ihr Code oder der Code der Klasse ziemlich schwierig ist, glaube ich ... Meinen Sie, Sie können nicht mehr als 5k Zeilen in einer XLS-Datei oder in einem Arbeitsblatt schreiben? andernfalls könnte ein hässlicher Workaround 5K Zeilen im ersten Blatt und der Rest im zweiten Blatt schreiben (also 5K Zeilen pro Blatt, wenn DB größer wird). Ich glaube nicht, dass XLS eine 5k-Zeilen-Beschränkung hat, daher sollte in Ihrem Skript etwas falsch oder falsch konfiguriert sein. Haben Sie es mehrmals versucht? Druckt es immer 5k Zeilen? oder könnte es aufgrund von Timeouts sein? (von deinem Skript oder deiner Verbindung)

    
Damien Pirsy 04.02.2011 07:12
quelle
0

Diese Art von Problem ist mehr als wahrscheinlich ein Serverspeicherproblem. Auf welcher Art von Server befinden Sie sich und sind Sie sicher, dass genügend Arbeitsspeicher und Ressourcen für die Verarbeitung großer Datendateien verfügbar sind? Wenn Sie das nicht wissen, ist es am besten, wenn Sie ein paar tausend Datensätze gleichzeitig einlesen, verarbeiten und dann zum nächsten Teil übergehen. Ich selbst würde es vorziehen, die große Datei in überschaubare Stücke (Dateien) zu zerlegen, auf denen ich dann jedes dieser Stücke bearbeiten könnte, um mein gewünschtes Ergebnis zu erhalten. Sobald alle Teile verarbeitet sind, können sie zusammengefügt werden, um eine neue große Datendatei zu erstellen.

    
DoctorLouie 04.02.2011 07:18
quelle

Tags und Links