2012-12-11 89 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