為效能而生,PHP Excel 擴充套件 xlswriter 1.3.3 釋出!

vikin發表於2019-12-24

為效能而生,PHP Excel 擴充套件 1.3.3 釋出!

xlswriter是一個 PHP C 擴充套件,可用於在 Excel 2007+ XLSX 檔案中讀取資料,插入多個工作表,寫入文字、數字、公式、日期、圖表、圖片和超連結。

它具備以下特性:

一、寫入
  • 100%相容的Excel XLSX檔案
  • 完整的Excel格式
  • 合併單元格
  • 定義工作表名稱
  • 過濾器
  • 圖表
  • 資料驗證和下拉選單
  • 工作表PNG/JPEG影象
  • 用於寫入大檔案的記憶體優化模式
  • 適用於Linux,FreeBSD,OpenBSD,OS X,Windows
  • 編譯為32位和64位
  • FreeBSD許可證
  • 唯一的依賴是zlib
二、讀取
  • 完整讀取資料
  • 游標讀取資料
  • 按資料型別讀取
  • xlsx 轉 CSV

測試環境: Macbook Pro 13 inch, Intel Core i5, 16GB 2133MHz LPDDR3 Memory, 128GB SSD Storage.

匯出

兩種記憶體模式匯出100萬行資料(每行27列,資料型別均為字串,單個字串長度為19)

  • 普通模式:耗時 29S,記憶體只需 2083MB
  • 固定記憶體模式:僅需 52S,記憶體僅需 <1MB
匯入

100萬行資料(單行1列,資料型別為INT)

  • 全量模式:耗時 3S,記憶體僅 558MB
  • 遊標模式:耗時 2.8S,記憶體僅 <1MB

應用場景

  • 較多的 xlsx 檔案碎片,合併為單一CSV檔案,統一處理;
  • xlsx檔案新增的速度大於任務處理速度,可非同步將檔案轉為CSV後,使用更高效的工具處理(例如:資料庫工具直接匯入CSV);

示例

demo.php

$excel = new \Vtiful\Kernel\Excel(['path' => './tests']);

$filePath = $excel->fileName('tutorial.xlsx', 'TestSheet1')
    ->header(['String', 'Int', 'Double'])
    ->data([
        ['Item_1', 10, 10.9999995],
    ])
    ->output();

// 寫入方式開啟,將檔案指標指向檔案末尾。
$fp = fopen('./tests/file.csv', 'a');

// 將 xlsx 檔案寫入 CSV
$resultBoolOne = $excel->openFile('tutorial.xlsx')
    ->openSheet()
    ->putCSV($fp);

// 將 xlsx 檔案追加寫入 CSV
$resultBoolTwo = $excel->openFile('tutorial.xlsx')
    ->openSheet()
    ->putCSV($fp);

file.csv

String,Int,Double
Item_1,10,10.9999995
String,Int,Double
Item_1,10,10.9999995

應用場景與常規模式類似,不同之處在於上層業務可以在回撥函式中加工資料,將xlsx中的資料過濾加工並寫入csv。

Github:https://github.com/viest/php-ext-excel-exp...

Gitee:https://gitee.com/viest/php-ext-xlswriter

PECL:https://pecl.php.net/package/xlswriter

https://xlswriter-docs.viest.me

最後的最後請不要忘記 star

相關文章