PhpExcel funktioniert nach dem Einstellen von 20 Zelltypen nicht mehr

8

Ich habe ein Skript, das eine kleine xls-Tabelle erzeugt (~ 25x15). Es enthält Prozentsätze und Zeichenfolgen und ich habe einen if-Operator, der die aktuelle Zelle als Prozentsatztyp mit diesem Code setzt:

%Vor%

Aber wenn ich exportiere und die Datei anschaue, sehe ich, dass es nur ungefähr 20 Zellen Typ und Stil gesetzt hat. Und alle anderen sind mit Standardeinstellungen. Ich debuggte und erkannte, dass das Problem nicht in meiner Logik liegt. Ich lese über zunehmenden PHP-Cache-Speicher - versuchte es, aber es hat nicht funktioniert. Bitte helfen, weil ich mindestens 15 mal größere Tabelle exportieren muss. Vielen Dank im Voraus!

    
Martin 05.08.2013, 01:39
quelle

3 Antworten

3

PHPExcel weist ziemlich viel Speicher zu

Während PHPExcel eine schöne Bibliothek ist, kann die Verwendung von PHP sehr viel Speicherplatz erfordern.

Laut diesem Thread können nur 5 Zellen 6 MB Speicherverbrauch rendern:

%Vor%

Ein weiterer Benutzer ist sogar mit einer 256MByte-Speichereinstellung gescheitert .

Während PHPExcel Möglichkeiten bietet, seinen Speicherbedarf zu reduzieren, haben sich alle Reduzierungen in meinem Fall als zu klein herausgestellt. Diese Seite auf github enthält Einzelheiten zum Cache-Management von PHPExcel Optionen. Diese Einstellung serialisiert beispielsweise und die GZIPs die Zellstruktur eines Arbeitsblatts:

%Vor%

PHPExcel's FAQ erklärt dies:

  

Fataler Fehler: Erlaubte Speichergröße von xxx Byte erschöpft (versucht,   (yyy bytes zuweisen) in zzz in Zeile aaa

     

PHPExcel enthält eine "im Speicher" -Darstellung einer Tabellenkalkulation   ist anfällig für die Speicherbeschränkungen von PHP. Der Speicher zur Verfügung gestellt   zu PHP kann erhöht werden, indem man den Wert des memorylimit redigiert   Anweisung in Ihrer php.ini-Datei oder mit iniset ('memory_limit',   '128M') innerhalb Ihres Codes (ISP erlaubt);

     

Einige Leser und Autoren sind schneller als andere, und sie verwenden auch   unterschiedliche Mengen an Speicher. Sie können einige Hinweise auf die finden   relative Leistung und Speichernutzung für die verschiedenen Reader und   Writer, über die verschiedenen Versionen von PHPExcel, hier    Ссылка

     

Wenn Sie den Speicher bereits auf ein Maximum erhöht haben oder Ihre   Speichergrenze, dann beschreibt diese Diskussion an der Tafel einige der   Methoden, die angewendet werden können, um die Speichernutzung Ihrer Skripts zu reduzieren   mit PHPExcel    Ссылка

Messergebnisse für PHP Excel

Ich habe die PHPExcel-Beispieldatei [01simple.php][5] instrumentiert und einige schnelle Tests durchgeführt.

Verbraucht 92 KByte :

%Vor%

Verbraucht 4164 KBytes :

%Vor%

Wenn man dieses Fragment mehrere Male unverändert ausführt, verbraucht jedes Fragment ungefähr 4 MB.

Die Überprüfung Ihrer App ist logisch korrekt

Um sicherzustellen, dass Ihre App logisch korrekt ist, würde ich vorschlagen, zuerst den PHP-Speicher zu erhöhen:

%Vor%

In meinem Fall muss ich exportieren, um Ergebnisdaten einer Online-Bewertungsanwendung zu exportieren. Während es weniger als 100 Zellen horizontal gibt, muss ich bis zu mehreren 10.000 Zeilen exportieren. Während die Anzahl der Zellen groß war, enthält jede meiner Zellen eine Zahl oder eine Folge von 3 Zeichen - keine Formeln, keine Stile.

Bei starken Speicherbeschränkungen oder großen Tabellenkalkulationen

In meinem Fall hat keine der Cache-Optionen den Betrag so stark reduziert, wie nötig. Außerdem ist die Laufzeit der Anwendung enorm gewachsen.

Schließlich musste ich zu altmodischen CSV-Dateiexporten wechseln.

    
SteAp 11.08.2013 15:27
quelle
2

Ich habe Ihren Code lokal ausgeführt und festgestellt, dass alle 26 Zellen, die Sie für diesen Prozentsatz festgelegt haben, das richtige Format und ein% -Zeichen haben. Ich musste natürlich zuerst die Zeilen 136-137 auskommentieren.

Dies muss mit Ihrer Einrichtung zusammenhängen. Ich kann mir nicht vorstellen, dass Sie für eine Tabelle dieser Größe zu wenig Speicher hätten.

Zu Ihrer Information habe ich bestätigt, dass es mit PHP Version 5.4.16 mit php Excel Version 1.7.6, 2011-02-27 funktioniert hat. Ich habe die Tabelle mit MS Excel 2007 geöffnet.

    
Spork 12.08.2013 15:58
quelle
1
%Vor%

clearstatcache (); kann nützlich sein. Laden Sie diese Funktion am Anfang der PHP-Seite.

    
Burhan 05.08.2013 05:23
quelle

Tags und Links