Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung, wie PHPExcel durch PHP_XLSXWriter ersetzt wird (Bild)

Einführung, wie PHPExcel durch PHP_XLSXWriter ersetzt wird (Bild)

黄舟
黄舟Original
2018-05-26 16:08:213354Durchsuche

PHPExcel ist ein Open-Source-Framework zur Verarbeitung von Excel- und CVS-Dateien. Leider verwaltet PHPExcel dieses Projekt offiziell nicht mehr. Das offizielle Team hat ein neues Projekt auf Github gestartet. In diesem Artikel werden Ihnen daher hauptsächlich Beispiele für die Verwendung von PHP_XLSXWriter anstelle von PHPExcel vorgestellt. Freunde in Not können sich darauf beziehen.

Vorwort

Dieser Artikel stellt Ihnen hauptsächlich die Methode vor, PHP_XLSXWriter als Ersatz für PHPExcel zu verwenden. Ich werde ihn als Referenz und zum Studium mit Ihnen teilen. Ich werde weiter unten nichts sagen. Schauen wir uns die ausführliche Einführung an:

Was ist der Unterschied zwischen den beiden?

PHPExcel ist ein Prozess für Excel, ein Open-Source-Framework für CVS-Dateien, basierend auf dem OpenXML-Standard und der PHP-Sprache von Microsoft. Sie können damit Tabellenkalkulationen in verschiedenen Formaten lesen und schreiben. Dies ist auch das bisher vielseitigste Excel-Verarbeitungstool für PHP, hat aber einen sehr fatalen Nachteil: Es nimmt viel Speicher in Anspruch und ist bei großen Stapeln fast ermüdend Ob Sie es mögen oder nicht, die Verarbeitungsgeschwindigkeit ist sehr langsam, aber es ist sehr funktionsreich und verfügt über viele APIs. Wenn Sie also Excel-Tabellen in komplexe Formate exportieren, müssen Sie es oft verwenden, was wirklich eine Hassliebe ist Beziehung.

Leider verwaltet PHPExcel dieses Projekt offiziell nicht mehr. Das offizielle Team hat auf Github ein neues Projekt namens PHPSpreadsheet gestartet. Das neue Projekt verwendet viele neue PHP-Funktionen, wie z. B. Namespace . PSR-Standard, und seine Leistung ist viel höher als PHPExcel. Das Projekt befindet sich jedoch noch im Entwicklungsstatus (12.07.2017). Es wird geschätzt, dass es noch mehr Fehler geben wird Es wird nicht empfohlen, das Bild unten zu verwenden:

Im Vergleich zu PHPExcel ist PHP_XLSXWriter ein kleines, aber leistungsstarkes Excel-Lese- und Schreib-Plug-in verfügt nicht über so viele erweiterte Funktionen wie PHPExcel. Die Exportgeschwindigkeit ist jedoch sehr hoch, was sich sehr gut für Exportanforderungen mit besonders großen Datenmengen und unkomplizierten Berichtsformaten eignet der offizielle Geschwindigkeits- und Gedächtnistest:


Wie verwende ich PHP_XLSXWriter?

Herunterladen

Dies ist die Github-Adresse von PHP_XLSXWriter. Sie können es natürlich auch lokal herunterladen Klicken Sie hier, um es herunterzuladen. Laden Sie es herunter. Nach der Dekomprimierung können Sie sehen, dass es nur eine Kerndatei gibt: xlswriter.class.php. Es enthält viele Beispiele, auf die Sie verweisen können.


Verwendung

Für die meisten täglichen Berichtsanforderungen ist PHP_XLSXWriter geeignet mit der Verwendung von API vertraut.

Angenommen, wir möchten den Bericht im Bild unten exportieren und über den Browser herunterladen:

Code-Implementierung:

//writer 类
$writer = new XLSXWriter();
 //文件名
$filename = "example.xlsx";
//设置 header,用于浏览器下载
header('Content-disposition: attachment; filename="'.XLSXWriter::sanitize_filename($filename).'"');
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');

//导出的数据
$string = array (
 0 => 
 array (
 'payc_bill_time' => '2017-07-12 16:40:44',
 'payt_received_date' => '2017-07-12',
 'ci_name' => '租金',
 'payt_num' => 'YRZB(2012)A0047',
 'payt_scsr_name' => '李巧红',
 'payt_received' => '300.00',
 'paytd_type' => '现金',
 'emp_name' => '郑振标',
 ),
 1 => 
 array (
 'payc_bill_time' => '2017-07-12 16:39:55',
 'payt_received_date' => '2017-07-12',
 'ci_name' => '租金',
 'payt_num' => 'YRZB(2012)A0046',
 'payt_scsr_name' => '22222',
 'payt_received' => '45.00',
 'paytd_type' => '现金',
 'emp_name' => '郑振标',
 )
 );
 //每列的标题头
$title = array (
 0 => '开单时间',
 1 => '收款时间',
 2 => '开票项目',
 3 => '票据编号',
 4 => '客户名称',
 5 => '实收金额',
 6 => '收款方式',
 7 => '收款人',
);
//工作簿名称
$sheet1 = 'sheet1';

//对每列指定数据类型,对应单元格的数据类型
foreach ($title as $key => $item){
 $col_style[] = $key ==5 ? 'price': 'string';
}

//设置列格式,suppress_row: 去掉会多出一行数据;widths: 指定每列宽度
$writer->writeSheetHeader($sheet1, $col_style, ['suppress_row'=>true,'widths'=>[20,20,20,20,20,20,20,20]] );
//写入第二行的数据,顺便指定样式
$writer->writeSheetRow($sheet1, ['xxx财务报表'],
['height'=>32,'font-size'=>20,'font-style'=>'bold','halign'=>'center','valign'=>'center']);

/*设置标题头,指定样式*/
$styles1 = array( 'font'=>'宋体','font-size'=>10,'font-style'=>'bold', 'fill'=>'#eee',
'halign'=>'center', 'border'=>'left,right,top,bottom');
$writer->writeSheetRow($sheet1, $title,$styles1);
// 最后是数据,foreach写入
foreach ($data as $value) {
 foreach ($value as $item) { $temp[] = $item;}
 $rows[] = $temp;
 unset($temp);
}
$styles2 = ['height'=>16];
foreach($rows as $row){
 $writer->writeSheetRow($sheet1, $row,$styles2);
}

//合并单元格,第一行的大标题需要合并单元格
$writer->markMergedCell($sheet1, $start_row=0, $start_col=0, $end_row=0, $end_col=7);
//输出文档
$writer->writeToStdOut();
exit(0);

Jede Codezeile oben ist kommentiert. Sie können sich die Codebeispiele im Beispielordner und die Dokumentation auf der offiziellen Website ansehen. Die Dokumentation ist jedoch relativ kurz 🎜>

Leitfaden zu Sprungfallen:

Ich bin bei der Verwendung auch auf einige Fallstricke gestoßen, ich hoffe, sie wird Ihnen hilfreich sein:

Dateiname entspricht nicht dem Klassennamen

Dies ist eigentlich kein Problem bei Verwendung von require oder
require_once

, aber bei Verwendung von

autoload weil beides nicht übereinstimmt, kann es nicht identifiziert werden. Möglicherweise möchten Sie die Datei xlsxwriter.class.php in Ihr Projekt einführen und einen Namespace hinzufügen, damit sie automatisch geladen werden kann. Zu diesem Zeitpunkt müssen Sie den Dateinamen in den Klassennamen XLSXWriter.class.php ändern (hier in TP eingeführt). Wenn ich ihn beispielsweise in das Komponentenverzeichnis einfüge, füge ich den Namensraum Component hinzu Zu diesem Zeitpunkt gibt es auch eine Zip-Klasse in der Datei, die keinen Namespace eingeführt hat. Sie müssen „use ZipArchive“ hinzufügen. Nachdem diese abgeschlossen sind, können Sie sie an anderer Stelle im Projekt verwenden 🎜>Wie formatiere ich Spalten?

use Component;
$writer = new XLSXWriter();
Verschiedene Spalten müssen möglicherweise in unterschiedlichen Formaten angezeigt werden. Die Standardformate sind Textformate, aber manchmal müssen sie als numerische Spalten angezeigt werden, was für die Verwendung von Funktionen in Excel praktischer ist , wie in der Tabelle oben. Die Betragsspalte in muss zwei Dezimalstellen, Tausendstel und ein numerisches Format haben.

Sehen Sie sich den Code oben an. Das Zahlenformat wird tatsächlich in der writeSheetHeader-Methode festgelegt. Wenn Sie andere Formate benötigen, sind die häufig verwendeten Formate auf der Homepage aufgeführt offizielle Website.

Kann ich den Wert einer bestimmten Zelle individuell festlegen?

Dies ist jetzt noch nicht implementiert und unterstützt keine so feine Granularität. Ein Kompromiss besteht darin, Nullen in die Zellen zu schreiben, die nicht gefüllt werden müssen

Zusammenfassung

Das obige ist der detaillierte Inhalt vonEinführung, wie PHPExcel durch PHP_XLSXWriter ersetzt wird (Bild). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn