2014-07-25 182 views
1

我目前使用PHPExcel讀取使用讀過濾塊一個excel文件,如電子表格在未來有成爲大的潛力讀取過濾器,我需要確保無論大小如何,足夠的內存都可以自由處理。PHPExcel:結合使用「getHighestRow」與

作爲邏輯的一部分,我想以檢索錶行,這我知道可以做的數量如下:

$file = 'path/to/spreadsheet.xslx'; 
$objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
$objPHPExcel = $objReader->load($file); 
return $objPHPExcel->getActiveSheet()->getHighestRow(); 

我的問題是,這樣做會導致如果文件太大,PHP將耗盡內存?

即以同樣的方式,它會如果我用一個大文件執行以下操作:

$objPHPExcel->getActiveSheet()->tooArray(); 

如果是這樣,有檢索最高的行,而不會造成內存問題時的一種方式文件變大?

我就測試這件事作爲我的本地計算機上的文件3MB,似乎應付正常,但需要和時間越來越長,返回的最上一行的文件越大。

+0

不知道第7(Helper Methods)表示,如果有可以選擇這樣做,也許檢查PHPExcel庫中的迭代器並嘗試使其更輕一些?不知道它是否會改變很多,無論如何這是一個非常沉重的闡述:) – briosheje

+0

很酷,會做,謝謝你的迴應:)。由於這是一個命令行工具,我可能最終只是訴諸手動指定的行數作爲參數... –

回答

2

您可以檢索工作表中的行(或列)的數量,而無需加載整個文檔:

$file = 'path/to/spreadsheet.xslx'; 
$objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
$worksheetData = $objReader->listWorksheetInfo($file); 

echo '<h3>Worksheet Information</h3>'; 
echo '<ol>'; 
foreach ($worksheetData as $worksheet) { 
    echo '<li>', $worksheet['worksheetName'], '<br />'; 
    echo 'Rows: ', $worksheet['totalRows'], 
     ' Columns: ', $worksheet['totalColumns'], '<br />'; 
    echo 'Cell Range: A1:', 
     $worksheet['lastColumnLetter'], $worksheet['totalRows']; 
    echo '</li>'; 
} 
echo '</ol>'; 

正如PHPExcel User Documentation - Reading Spreadsheet Files

+0

啊哈,輝煌的,我也想知道是否有與元數據做我hadn」的一些方法噸遇到。謝謝馬克! –

+0

在有關PHPexcel的任何問題中,是否有任何方法標記Mark Ba​​ker? :P – briosheje

+0

@MarkBaker如果我需要計算唯一的行(按某個列),我該如何有效地實現這一點?比方說,爲名爲「用戶名」的列獲得唯一值的總數?忽略重複 – Andrew