2012-04-01 18 views
7

Ich möchte sicherstellen, dass kein Wert in einer von phpExcel erstellten Arbeitsmappe abgeschnitten ist. Um dies zu tun, rufe ichphpExcel Spaltengröße Probleme

$oCurrentSheet->getColumnDimension($aCurrentCoords['x'])->setAutoSize(true); 

jedes Mal, wenn ich eine Zelle schreibe. Das scheint nicht zu funktionieren: Viele Spalten enden wirklich winzig.

Kann jemand sicherstellen, dass jede Spalte in der ausgegebenen Excel-Arbeitsmappe nach ihrem Inhalt sortiert ist?

Antwort

12

Tun Sie dies nicht jedes Mal, wenn Sie eine Zelle schreiben ... es ist ein unnötiger Overhead. Tun Sie es nur einmal für jede Spalte.

Seien Sie gewarnt, es ist immer noch teuer beim Speichern, weil PHPExcel dann jede Zelle in dieser Spalte durchläuft, die erforderliche Breite basierend auf dem Inhalt dieser Zelle berechnet, Formelberechnung und Formatierung berücksichtigt und die maximale Größe von verwendet jede Zelle in dieser Spalte. Selbst dann ist es keine perfekte Lösung: Das Standardverhalten besteht darin, die Anzahl der anzuzeigenden Zeichen abzuschätzen und einen generischen Multiplikator basierend auf der Schriftart (Arial, Verdana von Calibri) und ein wenig Padding zu verwenden. Für eine genauere Berechnung können Sie die für die Berechnung verwendete Methode ändern, und der Code verwendet dann GD, um eine TTF-Begrenzungsbox zu erstellen und die Zellengröße auf die Dimensionen dieser Box zu stützen. Dies ist eine genauere Berechnung, aber viel langsamer.

Sie können die Berechnungsmethode ändern mit:

PHPExcel_Shared_Font::setAutoSizeMethod($method); 

vor dem Speichern, wobei $ Methode eine der folgenden ist:

PHPExcel_Shared_Font::AUTOSIZE_METHOD_APPROX 
PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT 

Dies ist noch keine perfekte Lösung, aber es ist die beste Berechnung, die PHPExcel kann.

Eine Alternative besteht darin, die calculateColumnWidths() -Methode des Arbeitsblatts direkt vor dem Speichern selbst aufzurufen ... und dann durch jede Dimension der Spalte zu gehen, um den Wert um etwa 5% zu erhöhen und sicherzustellen, dass die gesamte Spalte passt.