php 导出excel 10万数据

php导出excel 10万数据(此代码主要测试用,没写单元测试 还在修改中 后期加上单元测试)

在工作当中要对一些基本信息和其他信息导出

起初信息比较小无所谓。。。。

但当信息超出65535的时候

发现点问题了 超出了 而且 反应速度很慢

实现思路:

分页导出

伪代码:
1、获取总数据,并确定显示多少条数据(我这里显示2万)
2、循环页数
2.1 从1开始,获取当前页面偏移量[(当前页-1)*显示的数据条数]
2.2 根据偏移量显示2万条数据
2.3 选择和创建excel页码
2.4 设置excel基本数据
2.5 循环导出数据并填充到excel中
3、数据下载


     public function ceshi()
     {
        
       

        //总记录数
        $result=$this->db->count_all_results('nb_specialty');

        
        //每次导出20000条记录
        $limit=20000;

        //获取需要的总文件数
        $excel_count=ceil($result/$limit);

        $objPHPExcel = new PHPExcel();

        //循环导出
        //$i 文件一
        for($i=1;$i<=$excel_count;$i++)
        {
            //获取偏移数据
            $startSelect=($i-1)*$limit;

            if($i==1)
            {
                $objPHPExcel->setActiveSheetIndex($i-1);
            }else{
                $objPHPExcel->createSheet();
                $objPHPExcel->setActiveSheetIndex($i-1);
            }

            $result_array=$this->db->limit($limit,$startSelect)->get('nb_specialty')->result_array();

            //echo $this->db->last_query();

            $objPHPExcel->getActiveSheet()->setTitle('培养方案 -- 项目');

            $objPHPExcel -> setActiveSheetIndex($i-1)
            -> setCellValue('A1', '测试');

            foreach($result_array as $key=>$val)
            {
                $objPHPExcel->getActiveSheet()->setCellValue('A'.$key, $val['id']);
                
            }
 
            
        }

        

        header('pragma:public');

        header('Content-type:application/vnd.ms-excel;charset=utf-8;name="测试.xls"');

        header("Content-Disposition:attachment;filename=测试.xls");//attachment新窗口打印inline本窗口打印

        $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 

        $objWriter->save('php://output');
        


      

       
        

     }

猜你喜欢

转载自www.cnblogs.com/mengluo/p/9646529.html