Nach meinem Artikel „So erstellen Sie Microsoft -Word -Dokumente mit PHP“ (unter Verwendung der Interop -Funktion unter Windows), gab es einige Kommentare, die eine reine PHP -Implementierung forderten, d. H. Nur eine universelle PHP -Bibliothek zur Manipulation von Bürodateien.
In diesem Artikel werden wir sehen, wie eine Phpexcel -Bibliothek verwendet wird, um in einer Web -App eine Funktion „Exportieren zu Excel“ bereitzustellen, damit der Benutzer die Daten zur weiteren Analyse in eine Excel 2007/2013 -Datei exportieren kann.
HINWEIS: Es gibt einige PHP -Bibliotheken, die Excel- (und Office-) Dateimanipulationen bereitstellen können. Die Lib, die wir hier verwenden, heißt Phpexcel, eine Untergruppe von Phpoffice, die hier kloniert werden kann.
Nach diesem Tutorial erhalten wir:
Beginnen wir an.
Um PHPExcel zu verwenden, müssen wir über 5.2.0 eine PHP -Version haben. Es sind auch 3 PHP-Erweiterungen aktiviert: PHP_zip (was für die Betreiberung von Office 2007-Formaten von wesentlicher Bedeutung ist), php_xml und php_gd2 (optional, jedoch für die genaue Spaltenbreite automatische Kalkulation erforderlich).
).Installieren Sie als nächstes die Bibliothek über den Komponisten.
Natürlich sollten wir unsere Datenbank in Betrieb haben. Der Datenmüll für dieses Tutorial (Lakers.sql) wurde in das mit diesem Artikel zugeordnete Repo hochgeladen. Die Daten werden mit einer einfachen SQL-Anweisung abgerufen: "Ausgewählte * von Lakers" (insgesamt 90 Datensätze, einschließlich 8 Vorsaisonen und 82 reguläre Saisonspiele).
Außerdem verwendet diese Demo Silex als MVC -Framework. Zweig wird als Vorlagenmotor verwendet. Stellen Sie sicher, dass die erforderlichen Abhängigkeiten in Ihrer Datei composer.json korrekt angegeben sind.
index.php ist der Einstiegspunkt für unsere Silex -Anwendung. Es werden zwei Routen definiert:
<span>$app->get('/', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->index($app); </span><span>}); </span> <span>$app->post('/export', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->export($app); </span><span>});</span>
Route '/' ist unser Einstiegspunkt und zeigt die Daten und die Schaltfläche „Exportieren“ an. Die Route '/Export' führt den Back -End -Handlingsprozess durch, der tatsächlich in Exporte exportiert. Beide Funktionen sind in eine benutzerdefinierte Klasse (classexcel.php) verpackt. Im Rest dieses Artikels konzentrieren wir uns auf diese Datei - oder genauer gesagt die in dieser Datei definierte Exportfunktion und verwandte Funktionen und diskutieren mehrere wichtige Aspekte der Excel -Manipulation mithilfe der Phpexcel -Bibliothek.
Wenn wir auf das Symbol klicken, um Excel zu starten, startet die Excel -Anwendung. Unter normalen Umständen wird es auch eine Arbeitsmappe mit 3 (in Excel 2013, nur 1) Arbeitsblättern enthalten. Das Arbeitsblatt ist das „Leinwand“, mit dem wir spielen. Dies sind die beiden wichtigsten Begriffe in Excel. Weitere wichtige Begriffe können: Zelle, Bereich usw.
Um eine Excel -Datei zu instanziieren, verwenden wir:
<span>$ea = new <span>\PHPExcel</span>(); // ea is short for Excel Application</span>
Eine Excel -Anwendungsinstanz wird normalerweise einer physischen Excel -Datei zugeordnet. Es verfügt über eigene Meta -Daten, um die von uns erstellte Datei zu beschreiben. Die Meta-Daten werden angezeigt, wenn wir eine Excel-Datei „Alt-Enter“ (oder mit der rechten Maustaste auf diese Datei klicken und „Eigenschaften“ auswählen):
Die im obigen Dialog angezeigten Eigenschaften haben entsprechende SETXXXX -Methoden zum Festlegen dieser Eigenschaften, wobei XXXX nahezu identisch mit den im Dialog angegebenen Eigenschaftennamen ist:
<span>$ea->getProperties() </span> <span>->setCreator('Taylor Ren') </span> <span>->setTitle('PHPExcel Demo') </span> <span>->setLastModifiedBy('Taylor Ren') </span> <span>->setDescription('A demo to show how to use PHPExcel to manipulate an Excel file') </span> <span>->setSubject('PHP Excel manipulation') </span> <span>->setKeywords('excel php office phpexcel lakers') </span> <span>->setCategory('programming') </span> <span>;</span>
Die Methoden (setxxxx) sind ziemlich selbsterklärend und zart dem Dialog "Eigenschaften" recht gut. Es gibt einige Unstimmigkeiten in der Zuordnung, aber sie sind für uns nicht allzu schwierig, die Verbindung herzustellen (z. B. werden „Autoren“ auf SetCreator zugeordnet).
Das Arbeitsblatt ist wahrscheinlich das Objekt, das wir am meisten manipulieren: Zellen mit Daten oder Formeln, Anwenden von Stilen, Datenfilterung, Einfügen eines Diagramms usw.
Um den Verweis auf ein Arbeitsblatt zu erhalten, verwenden wir:
<span>$ews = $ea->getSheet(0); </span><span>$ews->setTitle('Data');</span>
Die Blätter in einer Arbeitsmappe sind immer 0-idexiert. Das erste (und bisher nur das einzige) Blatt ist Blatt Null. Der Standardname dieses Blatts lautet immer „Arbeitsblatt“ und wir können es mit der Setitle -Methode ändern.
Um eine Zelle/Zellen zu bevölkern, haben wir mindestens zwei Optionen:
<span>$ews->setCellValue('a1', 'ID'); // Sets cell 'a1' to value 'ID </span> <span>$ews->setCellValue('b1', 'Season'); </span> <span>... </span> <span>//Fill data </span> <span>$ews->fromArray($data, ' ', 'A2');</span>
Die von ARray -Methode nimmt 3 Parameter an:
1. Die Datenquelle in Array -Form;
2. Ein "Füllstoff" -Wert für den Fall, dass die Daten null sind;
3. Eine Zellreferenz zum Starten der Füllung (von links nach rechts, dann nach unten).
Hinweis: Wenn wir PDO zum Abrufen der Daten verwenden, ist ein einfaches $ res = $ q-> fetchall (pdo :: fetch_assoc); Call erzwingt den zurückgegebenen Ergebnisdatensatz so, dass nur ein zugehöriges Array ohne Index enthält. Wenn Fetchall ohne die Option PDO :: fetch_assoc aufgerufen wird, enthält der Ergebnissatz tatsächlich zwei Sätze identischer Daten, einen in zugeordneten Array -Formular, einen in indiziertem Formular und erstellt Duplikate in der Excel -Datei, wenn sie von ARray verwendet werden.
Möglicherweise möchten wir auch die Kopfzeile (ID, Jahreszeit usw.) stylen. Dazu haben wir auch zwei Möglichkeiten:
<span>$app->get('/', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->index($app); </span><span>}); </span> <span>$app->post('/export', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->export($app); </span><span>});</span>
Eine Möglichkeit besteht darin, einige GET -Methoden zu verwenden, um das Stilobjekt abzurufen, das wir ändern und ändern möchten. Wir tun dies für den Stil „Hintergrundfüllung“.
Das andere ist es, ein "Stil" -Array zu deklarieren und die Stile anzugeben, die wir ändern möchten und wozu sie geändert werden sollen. Anschließend verwenden wir ApplyFromArray, um die Stile in einer Charge anzuwenden. Hier haben wir die Schrift und die Ausrichtung geändert.
Beide Methoden unterstützen den Bereich als Parameter ($ header = 'a1: h1';), was sehr bequem ist.
Schließlich möchten wir möglicherweise die Säulenbreite einstellen, damit sie die maximale angezeigte Länge in jede Spalte einstellen:
<span>$ea = new <span>\PHPExcel</span>(); // ea is short for Excel Application</span>
Leider unterstützt dies keinen Bereichsparameter, daher verwenden wir eine für die Schleife, um dies zu erreichen.
Wenn wir jetzt die Datei speichern - wir werden später speichern - wir werden sehen, dass die XLSX -Datei mit den Daten gefüllt und ordnungsgemäß formatiert ist:
Ich verwende immer ein separates Blatt, um die Originaldaten zu speichern, und mindestens ein weiteres Blatt, um die Zusammenfassung und/oder analytische Informationen anzuzeigen.
Um ein neues Arbeitsblatt einzufügen, tun wir:
<span>$ea->getProperties() </span> <span>->setCreator('Taylor Ren') </span> <span>->setTitle('PHPExcel Demo') </span> <span>->setLastModifiedBy('Taylor Ren') </span> <span>->setDescription('A demo to show how to use PHPExcel to manipulate an Excel file') </span> <span>->setSubject('PHP Excel manipulation') </span> <span>->setKeywords('excel php office phpexcel lakers') </span> <span>->setCategory('programming') </span> <span>;</span>
Die Addsheet -Methode erfordert zwei Parameter.
Mit dem eingefügten Arbeitsblatt können wir die Zellen in diesem Arbeitsblatt wie gewohnt bevölkern und Stile anwenden. In diesem Blatt verwenden wir Formeln:
<span>$ews = $ea->getSheet(0); </span><span>$ews->setTitle('Data');</span>
Sie sehen, es unterscheidet sich nicht von dem, was wir im vorherigen Abschnitt getan haben. Die Formelzeichenfolge ist genau wie die, die wir in eine Excel -Datei eingeben, um die erforderliche Berechnung durchzuführen.
HINWEIS: Bitte achten Sie besonders auf die Zellreferenz (G2: G91). Eine faule Art zum Schreiben dieser Formel besteht darin, einen Bereich wie G: g zu verwenden. Dies funktioniert einwandfrei, wenn es keine Tabelle im Blatt gibt. Wenn es ein Diagramm gibt, fällt die G: G -Notation aus und bringt eine Ausnahme.
Dieses "Zusammenfass" -Blatt sieht wie folgt aus:
Der in Zelle B4 gezeigte % wird durch den folgenden Code festgelegt:
<span>$ews->setCellValue('a1', 'ID'); // Sets cell 'a1' to value 'ID </span> <span>$ews->setCellValue('b1', 'Season'); </span> <span>... </span> <span>//Fill data </span> <span>$ews->fromArray($data, ' ', 'A2');</span>
Bitte beachten Sie hier einige Styling -Probleme. Für A1 habe ich den folgenden Stil angewendet:
<span>$app->get('/', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->index($app); </span><span>}); </span> <span>$app->post('/export', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->export($app); </span><span>});</span>
Das Ergebnis zeigt, dass das Schriftgewicht, die Schriftgröße und die Ausrichtung korrekt angewendet werden. Die Verschmelzung von A1 und B1 in A1 erfolgt ebenfalls korrekt. Die setAutosize -Methode schlägt jedoch in dieser zusammengeführten Zelle fehl. Das Ergebnis ist, dass diese Zelle (A1) immer noch gepresst wird. Dies bedeutet, dass die Berechnung der automatischen Breite nicht immer funktioniert. Nun, sowieso keine große Sache.
Es ist immer schön, eine visuelle Darstellung unserer Daten zu haben, sodass das Diagramm nützlich ist. Excel verfügt über eine Reihe integrierter Diagramme, aus denen wir auswählen können. PHPExcel kann fast alle davon abschließen. Das erste Diagramm, das wir erstellen sollen, ist ein Zeilendiagramm, das die Höhen und Tiefen der Ergebnisse in jedem Spiel des Lakers -Teams und seines Gegners zeigt.
Erstellen eines Diagramms ist auch mit Unterstützung einer Bibliothek ein langwieriger Codierungsjob. Der vollständige Code dieses Prozesses finden Sie in den Methoden AddChart1 und AddChart2, die sich in unserer Datei classexcel.php befinden. Ich werde nur die wichtigsten Schritte erklären.
Eine Data -Serie -Etikett identifiziert Datenreihen, indem sie einen Namen (Etikett) geben. In unserem Fall, wenn wir die Punktzahlen von Lakers und ihren Gegner zeigen wollen, sehen wir uns zwei Labels an: Self Score und Gegner. Ihre Etiketten finden Sie in D1 bzw. E1:
<span>$ea = new <span>\PHPExcel</span>(); // ea is short for Excel Application</span>
Eine Data -Series -Etikett ist eigentlich eine Instanz von PHPExcel_Chart_DataSeriesValues. Der Konstruktor enthält vier Parameter:
Dies identifiziert das Etikett für die x -Achse. Zum Beispiel erzielte Lakers bei „2013-11-15“ 86 und ihr Gegner erzielte 89. Die „2013-11-15“ ist das Label für diese beiden Punkte. Für unseren Fall werden wir die Spalte "Date gespielt" von Zeile 2 bis Zeile 91:
verwenden<span>$ea->getProperties() </span> <span>->setCreator('Taylor Ren') </span> <span>->setTitle('PHPExcel Demo') </span> <span>->setLastModifiedBy('Taylor Ren') </span> <span>->setDescription('A demo to show how to use PHPExcel to manipulate an Excel file') </span> <span>->setSubject('PHP Excel manipulation') </span> <span>->setKeywords('excel php office phpexcel lakers') </span> <span>->setCategory('programming') </span> <span>;</span>
Der Konstruktor ist der gleiche, ebenso wie die Parameter.
Wir werden "Self Score" (Spalte D) und "Gegner Score" (Spalte E) verwenden. Beide sind von Reihe 2 bis zur Reihe 91.
<span>$ews = $ea->getSheet(0); </span><span>$ews->setTitle('Data');</span>
Nachdem wir die oben genannten 3 kritischen Variablen hatten, können wir die Datenreihen einrichten. In Excel enthält eine Datenreihe die folgenden Informationen, die für das Erstellen eines Diagramms unerlässlich sind:
und der Konstruktor wird aufgerufen, indem einfach alle diese Parameter bestanden werden:
<span>$ews->setCellValue('a1', 'ID'); // Sets cell 'a1' to value 'ID </span> <span>$ews->setCellValue('b1', 'Season'); </span> <span>... </span> <span>//Fill data </span> <span>$ews->fromArray($data, ' ', 'A2');</span>
Als nächstes werden wir den Handlungsbereich und die Legende erstellen:
<span>$app->get('/', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->index($app); </span><span>}); </span> <span>$app->post('/export', function () use ($app) </span><span>{ </span> <span>$c=new trExcel<span>\Excel</span>(); </span> <span>return $c->export($app); </span><span>});</span>
Ein Plotbereich enthält ein Layout des Diagramms und der Datenreihe. Das Layout kann angeben, ob das Diagramm Werte, Prozentsätze usw. anzeigen muss. Wir können NULL verwenden, damit ein Standardlayout verwendet wird.
Eine Legende wird verwendet, um eine visuelle Darstellung der Datengruppen bereitzustellen.
Und jetzt können wir endlich das Diagramm erstellen:
<span>$ea = new <span>\PHPExcel</span>(); // ea is short for Excel Application</span>
Der einzige neue Parameter in diesem Konstruktor ist der Name des Diagramms. "Chart1" wird gut genug sein. Ein Titel des Diagramms kann über:
erstellt werden<span>$ea->getProperties() </span> <span>->setCreator('Taylor Ren') </span> <span>->setTitle('PHPExcel Demo') </span> <span>->setLastModifiedBy('Taylor Ren') </span> <span>->setDescription('A demo to show how to use PHPExcel to manipulate an Excel file') </span> <span>->setSubject('PHP Excel manipulation') </span> <span>->setKeywords('excel php office phpexcel lakers') </span> <span>->setCategory('programming') </span> <span>;</span>
Nachdem das Diagramm erstellt wurde, setzen wir seine Position und Größe, indem wir die Koordinaten des oberen linken und unteren rechten Ecken einstellen und in das Arbeitsblatt einfügen.
Hinweis: In den meisten Fällen ist eine Zellreferenz unempfindlich, aber bitte verwenden Sie die Kapitalbuchstabennummer, wenn im Blatt ein Diagramm vorhanden ist.
Als letzter Schritt speichern wir die Datei, damit der Benutzer sie herunterladen kann:
<span>$ews = $ea->getSheet(0); </span><span>$ews->setTitle('Data');</span>
verwendet ein Werksmuster, um ein Schriftstellerobjekt zu erstellen, um die Datei zu speichern. Ein Format wird angegeben (wir verwenden in unserem Fall das Format „Excel2007“).
Stellen Sie sicher, dass wir im Sparenprozess SetIncludechArts (TRUE) haben, andernfalls ist das Diagramm nicht vorhanden.
Erinnerst du dich, als ich sagte, dass Phpexcel fast alle Diagrammtypen nutzen könnte? Eine Ausnahme, dass diese LIB in Excel 2013 nicht gut abschneiden kann, ist, dass sie kein nutzbares Kreisdiagramm erzeugt. In unserem output.xlsx und unserem Code haben wir tatsächlich ein Kreisdiagramm erstellt (erledigt in AddChart1), aber beim Öffnen der Ausgabe.xlsx wird Excel 2013 einen Fehler auffordern. Wenn wir uns für weiterentwickeln, geht das Kreisdiagramm verloren und nur das Zeilendiagramm (erledigt in AddChart2) bleibt erhalten. Ein Fehlerbericht wurde bereits in sein Git -Repo eingereicht.
Jetzt sieht das Blatt „Daten“ so aus:
und eine Zoomansicht des Diagramms. Es ist richtig positioniert und dimensioniert:
In diesem Artikel haben wir gezeigt, wie man reines PHP und ein reines PHP -LIB (PHPExcel) verwendet, um Excel zu manipulieren. Wir haben eine neue Datei erstellt, die Daten besiedelt, in einem neuen Blatt und analytischen Daten hinzugefügt, ein Diagramm eingefügt und schließlich die Datei zum Download gespeichert.
Im Allgemeinen fand ich diese Phpexcel lib es wert und leicht zu lernen. Der Code -Einblick in eine IDE kann uns beim Programmieren sehr helfen.
Wir haben keine anderen gemeinsamen Funktionen in einer Excel -Datei behandelt - wir schreiben einen Folgeartikel zu diesen, wenn das Interesse hoch genug ist. Lass es uns wissen!
Seine offizielle Dokumentation und Beispiele sind ein schöner Ort, um detaillierte API -Nutzungserklärungen und praktikable Code -Snippets für gemeinsame Aufgaben zu finden. Lesen Sie sie gründlich. Sie können im geklonten Repo gefunden werden. Probieren Sie diese Bibliothek aus und teilen Sie uns Ihre eigenen Anwendungsfälle mit!
PHPExcel verwendet Ausnahmen, um Fehler zu behandeln. Wenn ein Fehler auftritt, macht PHPExcel eine Ausnahme. Sie können diese Ausnahmen mit einem Try-Catch-Block erfassen und angemessen behandeln. Auf diese Weise können Sie den Fluss Ihres Programms steuern und dem Benutzer aussagekräftige Fehlermeldungen angeben.
Das obige ist der detaillierte Inhalt vonGenerieren Sie Excel -Dateien und Diagramme mit PHPExcel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!