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