首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHPexcel单元缓存

PHPexcel单元缓存
EN

Stack Overflow用户
提问于 2012-12-11 22:44:17
回答 1查看 10.2K关注 0票数 1

我正在处理大的excel文件,我已经消除了限制,有没有一种方法可以让我更快地阅读我的单元格。我有6000行,并且在我的wamp文件夹中减少了tmp文件夹。

代码语言:javascript
复制
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');

使用工作表清理工作簿的内容,在工作表中

代码语言:javascript
复制
  `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";
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-11 22:56:58

提示1:

替换

代码语言:javascript
复制
for($i=0;$i<$highestRowEM;$i++){
    $varval=$objPHPExcel->getActiveSheet()->getCell('A'.$i)->getValue();

使用

代码语言:javascript
复制
$objSheet = $objPHPExcel->getActiveSheet();
for($i=0;$i<$highestRowEM;$i++){
    $varval = $objSheet->getCell('A'.$i)->getValue();

这样就不会在循环的每次迭代中调用$objPHPExcel->getActiveSheet()。

然后告诉我们您实际上正在尝试对工作表数据做什么,我们也许能够帮助它更快一些

编辑

除非必要,否则不要设置单元格值;在需要之前不要实例化Writer,并且绝对不要在循环中进行实例化;不要使用$letters和$alphabet,而要使用PHPExcel内置的例程,或者利用PHPPerl式的字符增量器;不要在循环比较中进行数学运算

代码语言:javascript
复制
  ////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');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13822127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档