Generieren großer Excel-Dateien aus MySQL-Daten mit PHP aus Unternehmensanwendungen

8

Wir entwickeln und warten einige Systeme, die Berichte im Excel-Format an den Endbenutzer exportieren müssen. Die Berichte werden aus einer MySQL-Datenbank mit etwas trivialer Verarbeitung gesammelt und ergeben in der Regel ~ 40000 Datenzeilen mit 10-15 Spalten. Wir erwarten, dass die Datenmenge stetig wächst.

Im Moment verwenden wir PHPExcel für die Excel-Generation, aber es funktioniert nicht mehr für uns. Nachdem wir über 5000 Zeilen gegangen sind, werden Speicherverbrauch und Ladezeiten unerträglich und können nicht dadurch gelöst werden, dass die maximalen Grenzen für die Speicherbelegung und die Ausführungszeiten von PHP unbegrenzt erhöht werden. Die Verarbeitung der Daten ist so mager wie möglich und das gesamte Problem besteht darin, dass PHPExcel ein Speicher ist. Die CSV-Generierung wäre leichter, aber leider müssen wir Excel (und Excel allein) aus unseren Diensten exportieren, weil der Benutzer dies wünscht. Dies liegt an den Formatierungsanforderungen usw., so dass CSV keine Option ist.

Irgendwelche Ideen / Empfehlungen für eine Drittanwendung / Modul / Service / was auch immer für das Generieren von großen Hervorhebungen? Es spielt keine Rolle, ob es sich um eine kommerzielle Lizenz handelt, solange sie unseren Anforderungen entspricht, in bestehende PHP-Anwendungen integriert werden kann und ihre Aufgabe erfüllt. Unsere Dienste laufen im Allgemeinen unter Linux / PHP / MySQL und wir können fast alles tun, was wir mit den Servern machen müssen.

Danke!

    
lostcontrol 18.05.2012, 08:15
quelle

6 Antworten

2

Für solch eine große Datenmenge würde ich wegen ihrer Speicheranforderungen keine Tools wie PHPExcel oder ApachePOI (für Java) empfehlen. Ich habe in letzter Zeit mit ähnlichen Aufgaben zu kämpfen und ich habe bequeme (aber vielleicht etwas fummelige) Möglichkeit gefunden, Daten in Tabellen zu injizieren. Serverseitige Generierung oder Aktualisierung von Excel-Tabellenkalkulationen kann somit einfache XML-Bearbeitung erreichen. Ich habe XLSX Tabellenkalkulation auf dem Server und jedes Mal, wenn Daten aus dB gesammelt werden, entzippe ich es mit PHP. Dann greife ich auf bestimmte XML-Dateien zu, die Inhalte von Arbeitsblättern enthalten, die eingefügt werden müssen, und füge Daten manuell ein. Danach komprimiere ich den Tabellenkalkulationsordner, um ihn als normale XLSX-Datei zu verteilen. Der gesamte Prozess ist ziemlich schnell und zuverlässig. Offensichtlich gibt es einige Probleme und Störungen, die mit der inneren Organisation von XLSX / Open XML-Dateien zusammenhängen (z. B. Excel neigen dazu, alle Zeichenfolgen in einer separaten Tabelle zu speichern und Verweise auf diese Tabelle in Arbeitsblättern zu verwenden). Aber wenn man nur Daten wie Zahlen und Strings injiziert, ist es nicht so schwer. Wenn jemand interessiert ist, kann ich etwas Code zur Verfügung stellen.

Okay, hier geht ein Beispielcode dafür. Ich habe versucht zu kommentieren, was es tut, aber zögern Sie nicht, nach weiteren Erklärungen zu fragen.

%Vor%     
bazinac 31.05.2012 08:39
quelle
1

Die Liste der Alternativen für PHPExcel, die ich versuche, auf dem neuesten Stand zu bleiben, ist hier

Wenn Sie nach roher Geschwindigkeit / Speicherleistung suchen, die über alles hinausgeht, was PHPExcel bieten kann, dann ist das einzige, das ich tatsächlich empfehlen würde Ilias Wrapper-Erweiterung für libXL , da die Bibliothek weiterhin aktiv unterstützt wird.

    
Mark Baker 18.05.2012 12:16
quelle
0

Besuche OfficeWriter . Wir haben kürzlich die Performance für massive Datensätze für ein Fortune-500-Finanzunternehmen gezielt verbessert. Es macht viel mehr mit dem Dateiformat, als Sie wirklich benötigen (Diagramme und was haben Sie), aber die API ist ziemlich einfach zu bedienen und mit der Auswertung könnten Sie ein POC schnell erhalten. Disclaimer - Ich bin bei den Ingenieuren, die die neueste Version erstellt haben.

Ein weiterer Nachteil für euch ist, dass es .NET ist.

    
Nick Martin 18.05.2012 15:31
quelle
0

Was ist mit nur Tabelle drucken?

%Vor%     
FDisk 07.06.2013 12:35
quelle
-1

Sie können im CSV-Format exportieren, Excel kann damit umgehen. Wenn Sie Probleme beim Schreiben der Datei haben, können Sie die Ergebnisse immer in einer Schleife (Paginierung) ablegen und an die CSV-Datei anhängen

Versuchen Sie, anschließend mit PHPExcel zu .xsl oder .odf Format zu konvertieren, andernfalls lassen Sie es bei CSV.

    
Boby 18.05.2012 08:21
quelle
-1

Haben Sie das alte Pear Excel (aka Spreadsheet_Excel_Writer: Ссылка ) getestet?

Checkout Diskussion in Bezug auf Pear vs PHPExcel:
Ссылка

    
Bo. 18.05.2012 08:21
quelle