2012-12-11 91 views
0

我正在使用大型的excel文件我已經刪除了限制有一種方法可以更快地讀取我的單元格。我有6000行,並減少了我的wamp文件夾中的tmp文件夾。
PHPexcel單元格緩存

set_time_limit(0); 
ini_set('memory_limit', '-1'); 
include'../Classes/PHPExcel.php'; 
include'../Classes/PHPExcel/IOFactory.php'; 
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp; 
$cacheSettings = array(' memoryCacheSize ' =>'8MB');  
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); 
$objReader = new PHPExcel_Reader_Excel2007(); 
$objPHPExcel = $objReader->load('Book1.xlsx'); 
$highestRowEM = $objPHPExcel->getActiveSheet()->getHighestRow(); 
echo $highestRowEM; 
for($i=0;$i<$highestRowEM;$i++){ 
    $varval=$objPHPExcel->getActiveSheet()->getCell('A'.$i)->getValue(); 
    if($varval==""){ 
     break; 
    } 
} 
echo $i; 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save('Book1.xlsx'); 

怎麼清理工作簿與工作表,在其中

`include'../Classes/PHPExcel.php'; 
    include'../Classes/PHPExcel/IOFactory.php'; 
    set_time_limit(0); 
    ini_set('memory_limit', '-1'); 
    $xlsxfiles=$_SESSION['file']; 
    echo $xlsxfiles; 
    echo "<br>"; 
    $objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
    $objPHPExcel = PHPExcel_IOFactory::load('../upload/'.$xlsxfiles); 
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007"); 
    ////Validation 
    foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { 
     $highestRow = $worksheet-> getHighestDataRow(); 
     $columnhighest=$worksheet->getHighestDataColumn(); 
     $columnhighestval=array_search($columnhighest, $alphabet); 
     echo 'Worksheet - ' , $worksheet->getTitle()." Number of rows: ".$highestRow."<br>"; 
     for($cl=0;$cl<$highestRow+1;$cl++){ 
      for ($ga=1;$ga<$columnhighestval;$ga++){ 
       $letters=strtoupper($alphabet[$ga]); 
       $clean=$worksheet->getCell($letters.$cl)->getValue(); 
       $cleandone=str_replace(','," ",$clean); 
       $worksheet->setCellValue($letters.$cl,$cleandone); 
      } 
      $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
     } 
    } 
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007"); 
    $objWriter->setOffice2003Compatibility(true); 
    $objWriter->save('../upload/'.$xlsxfiles); 
    echo "Done"; 

回答

0

提示1:

更換

for($i=0;$i<$highestRowEM;$i++){ 
    $varval=$objPHPExcel->getActiveSheet()->getCell('A'.$i)->getValue(); 

$objSheet = $objPHPExcel->getActiveSheet(); 
for($i=0;$i<$highestRowEM;$i++){ 
    $varval = $objSheet->getCell('A'.$i)->getValue(); 

然後,您在循環的每次迭代中都不會調用$ objPHPExcel-> getActiveSheet()。

然後告訴我們你實際上試圖與工作表數據做的,我們也許能夠幫助加快速度多一點

編輯

不要將電池價值,除非你必須; 在你需要它之​​前不要實例化Writer,並且絕對不在循環中; 而不是使用$字母和$字母,使用PHPExcel內置的例程,或利用PHP的Perl風格的字符增長器; 不要做你的循環比較

////Validation 
    foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { 
     $highestRow = $worksheet->getHighestDataRow(); 
     $columnhighest=$worksheet->getHighestDataColumn(); 
     $columnhighest++; 
     echo 'Worksheet - ' , $worksheet->getTitle()." Number of rows: ".$highestRow."<br>"; 
     for($cl = 0; $cl <= $highestRow; $cl++){ 
      for ($ga='A'; $ga !== $columnhighest; $ga++){ 
       $clean=$worksheet->getCell($ga.$cl)->getValue(); 
       $cleandone=str_replace(','," ",$clean); 
       if($clean != $cleandone) { 
        $worksheet->setCellValue($ga.$cl, $cleandone); 
       } 
      } 
     } 
    } 
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
+0

數學當我行的最高數它給了我6000元。不過,我有數據僅供高達1700超越1700什麼是空白行是有辦法,我可以刪除行之外的行,並減少需要多長時間通過所有的數據行。我的tmp文件在wamp中高達20GB。 – Mervyn

+0

PHPExcel目前不刪除行,只是清空單元格,所以它們仍然保留在工作簿中....但您可以使用$ highestRowEM = $ objPHPExcel-> getActiveSheet() - > getHighestDataRow();而不是$ highestRowEM = $ objPHPExcel-> getActiveSheet() - > getHighestRow();找到包含實際數據內容的最後一行。 getHighestRow()可以滿足其他許多情況,例如格式化但沒有數據的單元格。 –

+0

它仍然需要很長時間來處理和添加更多的磁盤空間。我只是添加了getHighestDataRow來讀取文件,但它仍然在tmp中添加更多空間,並且在使用具有41行代碼的文件時顯示了我的結果,並給出了結果。有另一種方法可以壓縮文件。 – Mervyn