blog

PHPはエクセル上で動作し、ボトルネックはもはやPHPではない!

xlswriter は、Excel 2007+ XLSX ファイルのデータを読み込み、 複数のワークシートを挿入し、テキストや数値、数式、日付、グラフ、 画像、ハイパーリンクを書き込むための PHP ...

May 30, 2020 · 4 min. read
シェア

xlswriter は PHP の C 拡張モジュールで、Excel 2007+ の XLSX ファイルからデータを読み込んだり、 複数のワークシートを挿入したり、テキストや数値、数式、日付、グラフ、 イメージ、ハイパーリンクを書き込んだりします。

特徴

I. 書き込み

  • エクセルXLSXファイルと100%互換
  • エクセル形式
  • 合併セル
  • ワークシート名の定義
  • フィルター
  • チャート
  • PNG/JPEG
  • 大容量ファイル書き込み時のメモリ最適化モード
  • Linux、FreeBSD、OpenBSD、OS X用。Windows
  • 32ビットと64ビットにコンパイル
  • FreeBSD
  • 依存関係は zlib だけです。

読書

  • データの完全な読み取り
  • カーソルによるデータの読み取り
  • データ型による読み取り

ツール

  • XLSX CSV

ベンチマーク

テスト環境

  • Macbook Pro 13 inch
  • CPU Intel Core i5
  • Memory 16GB 2133MHz LPDDR3

テストデータ

ABCDEFGHIJKLMNOPQRSTUVWXYZ

派生

2つのメモリモードで50万行のデータをエクスポート

  • ノーマルモード:16S、メモリ991.8MB;
  • 固定メモリーモード:24S、メモリー<1MB;

読む

50万行のデータ

  • カーソルモード:23S、メモリは1MB未満;
  • コールバック・モード:24秒かかり、メモリは1MB未満;

設置場所

Unix

pecl install xlswriter

Windows

GitHub Release dll

はじめに

通常モードのエクスポート

$config = [
 'path' => '/home/viest/xlswriter'
];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->fileName('tutorial.xlsx', 'sheet1')
 ->header(['Item', 'Cost'])
 ->data([
 ['Rent', 1000],
 ['Gas', 100],
 ['Food', 300],
 ['Gym', 50],
 ])
 ->output();

固定メモリーモードのエクスポート

$config = [
 'path' => '/home/viest/xlswriter'
];
$excel = new \Vtiful\Kernel\Excel($config);
$excel->constMemory('tutorial.xlsx', 'sheet1')
 ->header(['Item', 'Cost'])
 ->data([
 ['Rent', 1000],
 ['Gas', 100],
 ['Food', 300],
 ['Gym', 50],
 ])
 ->output();

カーソルモードの読み取り

$config = [
 'path' => '/home/viest/xlswriter'
];
$excel = new \Vtiful\Kernel\Excel($config);
$sheet = $excel->openFile('tutorial.xlsx')
 ->openSheet();
while ($row = $sheet->nextRow()) {
 var_dump($row);
}

コールバック・モードの読み取り

$config = [
 'path' => '/home/viest/xlswriter'
];
$excel = new \Vtiful\Kernel\Excel($config);
$excel
 ->openFile('tutorial.xlsx')
 ->nextCellCallback(function ($row, $cell, $data) {
 	 //
 });

性能比較

xlswriter

0.1 12.57 0.650 <1 0.9806
0.3 16.42 0.401 <1 0.6614
0.5 18.82 0.571 <1 0.28
1 29.35 0.36 <1 0.675
5 127.87 1.608 <1 2.9886
10 251.91 3.675 <1 5.1276
15 376.98 5.613 <1 8.5056
20 499.94 7.210 <1 11.9122

PHPSpreadSheet

0.1 11.31 0.236
0.3 28.51 1.172
0.5 48.47 2.912
1 95.58 4.344
5 457.94 24.300
10 914.52 52.428
15 1437.11 104.603
20 1827.69 130.390

PHP_XLSXWriter

0.1 5.55 0.312
0.3 5.55 0.726
0.5 5.47 1.530
1 5.27 2.660
5 5.51 10.373
10 5.37 20.755
15 5.42 31.823
20 5.35 41.505
Read next

スプリングクラウド-アリババ-nacos-discovery

どのような用途で春のソースコードを読むために私に尋ねないでください、尋ねることは無駄です、ちょうど私が自分の自信の過程で春を使用してみましょう!春に関連する投稿 - 一般的なフローチャートを説明するために関連する投稿 春の統合クライアントは、ハートビートタスク登録nを送信します。

May 30, 2020 · 24 min read