YangJieCheng

通过查阅资料可以找到PHPEXCEL本身已经有通过缓存来处理大数据的导出了。但是昨晚一直没有成功,这可捉急了。最后想来想去就替换了phpExcel的版本了。最后就成功了。话不多说,代码附上

<?php
    set_time_limit(0);
    header("Content-Type:text/html;charset=utf-8");
    define(\'EOL\', \'<br />\');
    define(\'CURSCRIPT\', \'shell\');
    define(\'WEB\',dirname(__FILE__).DIRECTORY_SEPARATOR);
    define ( \'ROOT_PATH\', dirname (WEB) . DIRECTORY_SEPARATOR . \'application\' . DIRECTORY_SEPARATOR );
    define ( \'FRAMEWORK_PATH\', substr ( ROOT_PATH, 0, - 12 ) . \'jcphp\' . DIRECTORY_SEPARATOR );
    define ( \'WXSERVER_PATH\', dirname (WEB) . DIRECTORY_SEPARATOR . \'wwwroot\' . DIRECTORY_SEPARATOR.\'wxserver\'.DIRECTORY_SEPARATOR);
    require FRAMEWORK_PATH . \'./class/class_core.php\';
    class_core::instance (false);
    $rootexcel =\'Classes/PHPExcel.php\';
    require_once($rootexcel);
    $column_number = 14;
    $objPHPExcel = new PHPExcel();// 创建一个处理对象实例
     $objActSheet = $objPHPExcel->getActiveSheet();
    ini_set("memory_limit", "1024M"); // 设置php可使用内存
    $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
    if (!PHPExcel_Settings::setCacheStorageMethod($cacheMethod)) {
        die($cacheMethod . " 缓存方法不可用" . EOL);
    }
    echo date(\'H:i:s\'), " 当前使用的缓存方法是: ", $cacheMethod, " 方式", EOL;
    echo date(\'H:i:s\'), " 开始设置文档属性", EOL;
   $objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
            ->setLastModifiedBy("Maarten Balliauw")
            ->setTitle("Office 2007 XLSX Test Document")
            ->setSubject("Office 2007 XLSX Test Document")
            ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
            ->setKeywords("office 2007 openxml php")
            ->setCategory("Test result file");


    echo date(\'H:i:s\'), " 开始添加单元格标题", EOL;
    $objPHPExcel->setActiveSheetIndex(0);
    $title = \'学员数据\';
    //设置表格标题
    $objActSheet->setCellValue(\'A1\', $title);
    //设置字体大小
    $objActSheet->getStyle(\'A1\')->getFont()->setName(\'宋体\');
    $objActSheet->getStyle(\'A1\')->getFont()->setSize(40);
    $objActSheet->getStyle(\'A1\')->getFont()->setBold(true);
     //合并标题单元格
    $objActSheet->getStyle(\'B2\')->getAlignment()->applyFromArray(
     array(
         \'horizontal\' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
         \'vertical\' => PHPExcel_Style_Alignment::VERTICAL_CENTER,
         \'rotation\' => 0,
         \'wrap\' => true
         ) );
    $styleArray1 = array(
      \'font\' => array(
        \'bold\' => true,
        \'size\'=>12,
        \'color\'=>array(
         \'argb\' => \'00000000\',
         ),
        ),
      \'alignment\' => array(
        \'horizontal\' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
        ),
      );
    $styleArray2 = array(
      \'font\' => array(
        \'bold\' => true,
        \'size\'=>12,
        \'color\'=>array(
          \'argb\' => \'00000000\',
          ),
        ),
      \'alignment\' => array(
        \'horizontal\' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
        ),
      );
    $arr=array(\'A\',\'B\',\'C\',\'D\',\'E\',\'F\',\'G\',\'H\',\'I\',\'J\',\'K\',\'L\',\'M\',\'N\');
    // 将A1单元格设置为加粗,居中
    $objPHPExcel->getActiveSheet()->getStyle(\'A1\')->applyFromArray($styleArray1);
    $objActSheet->mergeCells( \'A1:\'.chr(ord(\'A\')+$column_number-1).\'1\');//合并标题
    $objActSheet->setCellValue(\'A2\', \'编号\');
    $objActSheet->setCellValue(\'B2\', \'学员姓名\');
    $objActSheet->setCellValue(\'C2\', \'性别\');
    $objActSheet->setCellValue(\'D2\', \'身份证号\');
    $objActSheet->setCellValue(\'E2\', \'手机号\');
    $objActSheet->setCellValue(\'F2\', \'学员状态\');
    $objActSheet->setCellValue(\'G2\', \'教练\');
    $objActSheet->setCellValue(\'H2\', \'训练车辆\');
    $objActSheet->setCellValue(\'I2\', \'联系地址\');
    $objActSheet->setCellValue(\'J2\', \'报名日期\');
    $objActSheet->setCellValue(\'K2\', \'招生人\');
    $objActSheet->setCellValue(\'L2\', \'过科一日期\');
    $objActSheet->setCellValue(\'M2\', \'过科二日期\');
    $objActSheet->setCellValue(\'N2\', \'过科三日期\');
    foreach ($arr as  $v) {            
       $objPHPExcel->getActiveSheet()->getStyle($v.\'2\')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);// 居中
       $objPHPExcel->getActiveSheet()->getStyle($v.\'2\')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);           
       $objPHPExcel->getActiveSheet()->getColumnDimension($v)->setWidth(50);// 单元格宽度
       $objPHPExcel->getActiveSheet()->getStyle($v.\'2\')->applyFromArray($styleArray2);
   }
   $styleArray = array(
    \'borders\' => array(
        \'allborders\' => array(
                    //\'style\' => PHPExcel_Style_Border::BORDER_THICK,//边框是粗的
                    \'style\' => PHPExcel_Style_Border::BORDER_THIN,//细边框
                    //\'color\' => array(\'argb\' => \'FFFF0000\'),
                    ),
        ),
    );
    $i=3;
    $xueyuanModel = model(\'kehu\');
    $where = " mdid=28 ";
    $data = $xueyuanModel->get(array(\'*\'),$where,0,10000);
       if($data[\'count\']){
        $scoreModel = model(\'score\');
        foreach ($data[\'data\'] as $k => $rk) {
            $sex = $rk[\'UserSex\']==1?\'男\':\'女\';
            $objPHPExcel->getActiveSheet()->setCellValue(\'A\' . $i, $rk[\'Id\']);
            $objPHPExcel->getActiveSheet()->setCellValue(\'B\' . $i, $rk[\'UserName\']);
            $objPHPExcel->getActiveSheet()->setCellValue(\'C\' . $i, $sex);
            $objPHPExcel->getActiveSheet()->setCellValue(\'D\' . $i, "`".$rk[\'sfz\']);
            $objPHPExcel->getActiveSheet()->setCellValue(\'E\' . $i, $rk[\'UserMobile\']);
            $objPHPExcel->getActiveSheet()->setCellValue(\'F\' . $i, xyztdesc($rk[\'xyzt\']));
            $objPHPExcel->getActiveSheet()->setCellValue(\'G\' . $i, showtype2(\'jc_user\',\'TrueName\',\'Id\',$rk[\'jlid\']));
            $objPHPExcel->getActiveSheet()->setCellValue(\'H\' . $i, showtype2(\'jc_car\',\'chepai\',\'id\',$rk[\'carID\']));
            $objPHPExcel->getActiveSheet()->setCellValue(\'I\' . $i, $rk[\'UserAddr\']);
            $objPHPExcel->getActiveSheet()->setCellValue(\'J\' . $i, date(\'Y-md\',strtotime($rk[\'bmtime\'])));
            $objPHPExcel->getActiveSheet()->setCellValue(\'K\' . $i, showtype2(\'jc_user\',\'TrueName\',\'Id\',$rk[\'addid\']));
            //科目一,科目二,科目三通过时间
            $suba = array(\'L\'=>1,\'M\'=>2,\'N\'=>3); 
            foreach($suba as $sk=>$sv){
                $scorerow = $scoreModel->get(array(\'testtime\')," uId=\'".$rk[\'Id\']."\' AND score=1 AND subtype=".$sv."");
                $objPHPExcel->getActiveSheet()->setCellValue($sk . $i, $scorerow[\'testtime\']);
            }            
            foreach ($arr as $va) {
               $objPHPExcel->getActiveSheet()->getStyle($va.$i)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle($va.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
           }
           $objPHPExcel->getActiveSheet()->getRowDimension($i)->setRowHeight(20);
           $i++;
       }
   }
  $j=$i-1;
  $objPHPExcel->getActiveSheet()->getStyle(\'A1:H\'.$j)->applyFromArray($styleArray); 
   #######################################################################################################

    $objPHPExcel->getActiveSheet()->setTitle(\'客户信息\');
    echo date(\'H:i:s\'), " 设置格式为Excel2007版格式", EOL;
    $callStartTime = microtime(true);

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, \'Excel2007\');
    $objWriter->save(str_replace(\'.php\', \'.xlsx\', __FILE__));
    $callEndTime = microtime(true);
    $callTime = $callEndTime - $callStartTime;
    echo date(\'H:i:s\'), " 设置生成的文件为: ", str_replace(\'.php\', \'.xlsx\', pathinfo(__FILE__, PATHINFO_BASENAME)), EOL;
    echo date(\'H:i:s\'), \' 写入Workbook中耗时 \', sprintf(\'%.4f\', $callTime), " 秒", EOL;
    echo date(\'H:i:s\'), \' 当前内存使用情况: \', (memory_get_usage(true) / 1024 / 1024), " MB", EOL;
    echo date(\'H:i:s\'), " 内存使用峰值: ", (memory_get_peak_usage(true) / 1024 / 1024), " MB", EOL;
    echo date(\'H:i:s\'), " 完成写入文件", EOL;
    echo date(\'H:i:s\'), \' 文件被创建在: \', getcwd(), \'目录\', EOL;

 

分类:

技术点:

相关文章: