Chinaunix首页 | 论坛 | 博客
  • 博客访问: 908991
  • 博文数量: 91
  • 博客积分: 803
  • 博客等级: 准尉
  • 技术积分: 1051
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-24 13:42
文章分类

全部博文(91)

文章存档

2021年(1)

2020年(4)

2019年(4)

2018年(9)

2017年(11)

2016年(11)

2015年(6)

2014年(3)

2013年(28)

2012年(14)

分类: PHP

2017-11-23 10:02:11

迭代调用

点击(此处)折叠或打开

  1. while ( true ) {
  2.             $data = $this->iteration_excel($result['msg']['excel_path'],$result['msg']['excel_type'],$start_row,$chunk_size);
  3.             //处理业务逻辑
  4.             if( empty($data) ) {
  5.                 break;
                }

  6. }


根据迭代器调用指定行

点击(此处)折叠或打开

  1. /**
  2.      * 迭代excel
  3.      * $excel_path excel路径
  4.      * $excel_type 模板类型
  5.      * $start_row 开始行
  6.      * $chunk_size 步长
  7.      */
  8.     private function iteration_excel($excel_path,$excel_type,$start_row,$chunk_size) {
  9.         try {
  10.             //自动检测excel 类型
  11.             $inputFileType = PHPExcel_IOFactory::identify($excel_path);
  12.             $objReader = PHPExcel_IOFactory::createReader($inputFileType);

  13.             //初始化excel过滤器
  14.             $chunkFilter = new chunkReadFilter();
  15.             $chunkFilter->setRows($start_row, $chunk_size);
  16.             $objReader->setReadFilter($chunkFilter);

  17.             $objPHPExcel = $objReader->load($excel_path);
  18.             $objPHPExcel->setActiveSheetIndex(0);
  19.             $activeSheet = $objPHPExcel->getActiveSheet();
  20.             $data = array();
  21.             $endRow = $start_row + $chunk_size;

  22.             $highestColumn = ($excel_type == 0) ? 'I':'F';
  23.             $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
  24.             for ($row = $start_row; $row < $endRow; $row++) {
  25.                 for ($col = 0; $col < $highestColumnIndex; $col++) {
  26.                     $data[$row][] = (string) $activeSheet->getCellByColumnAndRow($col, $row)->getValue();
  27.                 }
  28.                 if(implode($data[$row], '') == '') {
  29.                     unset($data[$row]);
  30.                     break;
  31.                 }
  32.             }
  33.             return $data;
  34.         } catch( Exception $e ){
  35.             response ( "excel读取失败", 201, '' );
  36.         }
  37.     }

实现PHPExcel_Reader_IReadFilter 迭代器类

点击(此处)折叠或打开

  1. /**
  2.  * 分块读取EXCEL
  3.  * Class chunkReadFilter
  4.  */

  5. class chunkReadFilter implements PHPExcel_Reader_IReadFilter
  6. {
  7.     private $_startRow = 0; // 开始行
  8.     private $_endRow = 0; // 结束行


  9.     // 定义了一个读去指定范围行的方法
  10.     public function setRows($startRow, $chunkSize) {
  11.         $this->_startRow = $startRow;
  12.         $this->_endRow = $startRow + $chunkSize;
  13.     }
  14.     public function readCell($column, $row, $worksheetName = '') {
  15.         if ( $row >= $this->_startRow && $row < $this->_endRow) {
  16.             return true;
  17.         }
  18.         return false;
  19.     }
  20. }

阅读(1257) | 评论(0) | 转发(0) |
0

上一篇:多进程监听同一个端口

下一篇:PHP导出CSV

给主人留下些什么吧!~~