PhpSpreadsheet VS Box\Spout讀取excel性能對比

phpspreadsheet版本:1.5.0php

spout版本:2.7.3bash

 

在一樣的環境下,運行代碼,spout的在內存使用和時間花費上都佔優,在phpspreadsheet讀取失敗的文檔spout依然能正確完成讀取。.net

spout代碼excel

<?php
ini_set('memory_limit', '2G');
var_dump(memory_get_usage());
var_dump(microtime());
$loader = include 'vendor/autoload.php';
use Box\Spout\Common\Type;
use Box\Spout\Reader\ReaderFactory;
$file = '20.xlsx';
$type = pathinfo($file);
$type = strtolower($type["extension"]);
if ($type === 'xlsx') {
    $type = Type::XLSX;
} else {
    $type = Type::CSV;
}
try{
    $reader = ReaderFactory::create($type);
    $reader->open($file);
    $reader->setTempFolder('/dev/shm/');
    $iterator = $reader->getSheetIterator();
    $iterator->rewind();
    $sheet1 = $iterator->current();
    $rowIter = $sheet1->getRowIterator();
    $data = array();
    foreach ($rowIter as $rowIndex => $row) {
        $data[] = $row;
    }
    var_dump(count($data));
}catch (\Exception $e){
    return [];
}
var_dump(microtime());
var_dump(memory_get_usage());
var_dump(memory_get_peak_usage());

phpspreadsheet代碼code

<?php
ini_set('memory_limit', '2G');
var_dump(memory_get_usage());
var_dump(microtime());
$loader = include 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
$file = '20.xlsx';
try {
    $spreadsheet = IOFactory::load($file);
    $data = $spreadsheet->getActiveSheet()->toArray('', true, true);
    $spreadsheet->disconnectWorksheets();
    unset($spreadsheet);
    var_dump(count($data));
} catch (Exception $e) {
    var_dump($e->getMessage());
}
var_dump(microtime());
var_dump(memory_get_usage());
var_dump(memory_get_peak_usage());

 

 

更快速讀excel,可是空cell會直接跳過,一整行數據沒辦法一塊兒獲取到!blog

try {
  $sharedStringsHelper = new SharedStringsHelper('/a.xlsx');
  $sharedStringsHelper->extractSharedStrings();
  $index = 0;
  do {
     $cellValue = $sharedStringsHelper->getStringAtIndex($index)
     if($cellValue == false){
        break;
     }
  } while (true);
  $sharedStringsHelper->cleanup();
}catch(Exception $e){
  echo $e->getMessage();
}

其餘:內存

# Spout/Reader/XLSX/Helper/SharedStringsCaching/CachingStrategyFactory.php
class CachingStrategyFactory {
  ....
  const MAX_NUM_STRINGS_PER_TEMP_FILE = 10000; // 改爲50000
  ....
}
原文:https://blog.csdn.net/supergao222/article/details/78629965 文檔

相關文章
相關標籤/搜索