yii2.0 PHPExcel

//脚本:将数据导入Excel

public function actionTest(){

    $cache = \yii::$app->cache;

    //获取LOCK

    $lock = $cache->get(self::LOCKQA);

    if($lock){

        echo '任务正在执行。。。';exit;

}

    $cache->set(self::LOCKQA,1);

    $cacheData = $cache->get(缓存key);

    if($cacheData){

        $excelArray = [

            'A' => ['title' => '审核日期', 'field' => 'auditime'],

            'B' => ['title' => '关键词', 'field' => 'keyword'],

            'C' => ['title' => '标题', 'field' => 'title'],

];

        foreach($cacheData as $k => $v){

            $this->clearFile($k);

            foreach($v as $pk => $pv){

                if($pv){

                    $this->qa($pv,$k,$excelArray);

}

}

}

        $cacheDataNew = $cache->get(缓存key);

        //求差集 当脚本在执行过程中,可能有新的任务新增 所以要求差集删除本次执行的数据

        $cj = $this->array_diff_assoc_recursive($cacheDataNew,$cacheData);

        if($cj){

            $cache->set(缓存key,$cj);

        }else{

            $cache->delete(缓存key);

}

}

    $cache->delete(self::LOCKQA);

}

//多维数组的差集

public  function array_diff_assoc_recursive($array1,$array2){

    $diffarray=array();

    foreach ($array1 as $key=>$value){

        //判断数组每个元素是否是数组

        if(is_array($value)){

            //判断第二个数组是否存在key

            if(!isset($array2[$key])){

                $diffarray[$key]=$value;

                //判断第二个数组key是否是一个数组

            }elseif(!is_array($array2[$key])){

                $diffarray[$key]=$value;

            }else{

                $diff = $this->array_diff_assoc_recursive($value, $array2[$key]);

                if($diff!=false){

                    $diffarray[$key]=$diff;

}

}

        }elseif(!array_key_exists($key, $array2) || $value!==$array2[$key]){

            $diffarray[$key]=$value;

}

}

    return $diffarray;

}

//将数据导入excel多个sheet


public function qa($params,$adminid,$excelArray){

    $report = new QaSearch();

    $query = $report->search(['QaSearch' =>$params],3);

    $exportData = [];

    if($query) {

        $size = 15000;

        $count = $query->count();

        if ($count) {

            ob_start();

            $cacheMethod = \PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp;

            $cacheSettings = [' memoryCacheSize ' => '128MB'];

            \PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

            $phpExcel = new \PHPExcel();

            $phpExcel->getProperties()

                ->setCreator("XYWY")

                ->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");

            $total = ceil($count / $size);

            for ($i = 0; $i < $total; $i++) {

                $data = $query->offset($i * $size)->limit($size)->all();

                if ($data) {

                    foreach ($data as $k => &$v) {                       

$exportData[$k]['auditime'] = $v->auditime ? date('Y-m-d H:i:s', $v->auditime) : '';

                        $exportData[$k]['keyword'] = $v->keyword;

                        $exportData[$k]['title'] = $v->title;

}

                    $objWriter = $this->moreSheet($phpExcel, $excelArray, $exportData, $i);

                    unset($exportData);

                    unset($data);

}

}

            $filename = 'test.xlsx';

            unset($params);

            $path = \yii::$app->params['exportFilePath'].'/';

            if(!is_dir($path)){

                mkdir($path);

}

            $filePath = $path. $filename.'.xlsx';

            $objWriter->save($filePath);

            unset($phpExcel);

            unset($objWriter);

}

}

    unset($exportData);

}

/*@todo 生成多个sheet* */

public function moreSheet($phpExcel,$header,$data,$num){

    $phpExcel->createSheet();

    $phpExcel->setActiveSheetIndex($num);

    // 头部

    foreach ($header as $key => $val) {

        $phpExcel->getActiveSheet()->setCellValue($key . '1', $val['title']);

}

    // 内容

    $i = 2;

    if($data){

        foreach ($data as $val) {

            foreach ($header as $k => $v) {

                $fieldValue = isset($val[$v['field']])?$val[$v['field']]:'';

                $phpExcel->getActiveSheet()->setCellValue($k . $i, $fieldValue);

}

            $i ++;

}

}

    $objWriter = \PHPExcel_IOFactory::createWriter($phpExcel, 'Excel2007');

    return $objWriter;

}

但是使用PHPExcel 加载内容过大 ,而且加载的内容很多都用不到,导出大量数据的时候会内存溢出,设置ini_set("memory_limit",'256M');

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • # 数组部分 # 1.## array_chunk($arr, $size [, $preserve_key = ...
    clothTiger阅读 1,155评论 0 1
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,027评论 0 2
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,446评论 0 13
  • 早上出门买了一个大西瓜,顺手就放上了副驾驶位,开车走人,突然听到安全带未扎的提示音,看一下自己的扎的好好的,为这还...
    YQ筑梦阅读 382评论 3 10