2016-05-05 47 views
0

我正在將excel轉換爲csv。而我目前面臨的一個問題是轉換Excel文件時帶有15k條記錄,平均需要45到50秒來計算文件的行數和列數。使用PHPExcel將excel的批量記錄轉換爲csv

如果我使用50k記錄然後系統崩潰。在這裏,我沒有做任何csv轉換工作,是的,我只做了行和列計數。有沒有解決問題的方法或任何其他方法?您的建議非常感謝。

require_once('../PHPExcel/Classes/PHPExcel.php'); 

$start = time(); 

$infile = 'IMPORT_DATA_15000.xlsx'; 
$outfile = 'csv/15000.csv'; 

ini_set('memory_limit', -1); 

//Usage: 
convertExcel2CSV($infile); 

echo 'Time: ' . (time() - $start); 
die; 

function convertExcel2CSV($infile) 
{ 
    // Read your Excel workbook 
    try 
    { 
     $inputFileType = PHPExcel_IOFactory::identify($infile); 
     $objReader = PHPExcel_IOFactory::createReader($inputFileType); 
     $objPHPExcel = $objReader->load($infile); 
    } catch (Exception $e) 
    { 
     die('Error loading file "' . pathinfo($infile, PATHINFO_BASENAME) . '": ' . $e->getMessage()); 
    } 

    // Get worksheet dimensions 
    $sheet = $objPHPExcel->getSheet(0); 
    $highestRow = $sheet->getHighestRow(); 
    $highestColumn = $sheet->getHighestColumn(); 

    echo $highestColumn; 
    echo "===="; 
    echo $highestRow; 
} 

OUTPUT:

AMK 
==== 
15000 
+1

對於系統崩潰,你是什麼意思?是否有任何特定的錯誤消息? – codedge

+0

不,我不能得到任何消息,因爲文件有很多記錄,所以系統關閉,不完成我的過程。 –

+0

像codedge說,你的意思是'系統崩潰'?在產出之前它是否停止了?你有沒有檢查你的日誌?它會耗盡內存嗎? –

回答

0

如果你需要的是知道多少行和列有在每個工作表,那麼你爲什麼不乾脆用

$inputFileType = PHPExcel_IOFactory::identify($infile); 
$objReader = PHPExcel_IOFactory::createReader($inputFileType); 
$worksheetData = $objReader->listWorksheetInfo($inputFileName); 

var_dump($worksheetData); 

這是令人驚訝你可以通過閱讀simpy學習多少the documentation

還有一些方法可以讓你t o一次加載工作表或單元格的文件,以及其中描述的其他奇妙技術....並且知道那些工作表詳細信息listWorksheetInfo()提供的詳細信息將允許您以較小的塊處理文件,或者通過單元緩存減少內存使用量,或者只讀取數據而不是所有單元格樣式

+0

此解決方案解決了我的計數問題,但如何將15k數據轉換爲1k塊?我有這個鏈接。 http://stackoverflow.com/questions/25056030/phpexcel-how-can-i-read-the-excel-sheet-row-by-row –

+0

當你創建一個讀取過濾器來讀取塊中的數據時發生了什麼? –

+0

您是否嘗試過其他提及的其他方法,例如設置閱讀器只加載單元格數據而不是數據和樣式,或者使用單元格緩存? –