陈诺 2017-06-26 11:51:53 7995次浏览 2条回复 1 0 0
/**
     ********************************************************
     * 函数名: format_excel2array
     * 参数:
     * @param string $filePath Excel文件路径
     * @param int $sheet Excel指定表
     * @param string $header 导入的Excel数据类型。必须在全局变量中定义'excel_' . $header . '_header',user用户,task广告主任务
     *                       'excel_user_header' => ['A'=>'user_realname',"B"=>'user_name',"C"=>"user_dept","D"=>'grade_id'],
     * 函数描述:
     * @return array|void
     *******************************************************
     */
    public function format_excel2array($filePath='',$sheet=0,$header='user'){
        $excel_header = Yii::$app->params['excel_' . $header . '_header'];
        $grade_arr = array_flip(Yii::$app->params['grade_arr']);

        require dirname(dirname(__FILE__)).'/components/PHPExcel/PHPExcel.php';
        if(empty($filePath) or !file_exists($filePath)){die('file not exists');}
        $PHPReader = new \PHPExcel_Reader_Excel2007();        //建立reader对象
        if(!$PHPReader->canRead($filePath)){
            $PHPReader = new PHPExcel_Reader_Excel5();
            if(!$PHPReader->canRead($filePath)){
                echo 'no Excel';
                return ;
            }
        }
        $PHPExcel = $PHPReader->load($filePath);        //建立excel对象
        $currentSheet = $PHPExcel->getSheet($sheet);        //**读取excel文件中的指定工作表*/
        $allColumn = $currentSheet->getHighestColumn();        //**取得最大的列号*/
        $allRow = $currentSheet->getHighestRow();        //**取得一共有多少行*/
        $data = array();
        for($rowIndex=2; $rowIndex<=$allRow; $rowIndex++ ){        //循环读取每个单元格的内容。注意行从1开始,列从A开始
            for($colIndex='A'; $colIndex<=$allColumn; $colIndex++){
                $addr = $colIndex.$rowIndex;
                $cell = $currentSheet->getCell($addr)->getValue();
                if($cell instanceof PHPExcel_RichText){ //富文本转换字符串
                    $cell = $cell->__toString();
                }
                if($colIndex == "D" && $header == 'user'){
                    $cell = $grade_arr[$cell];
                }
                if($colIndex == "A" && $header == 'task'){
                    $cell = \PHPExcel_Shared_Date::ExcelToPHP($cell);
                }
                $data[$rowIndex-1][$excel_header[$colIndex]] = $cell;
            }
        }
        return $data;
    }


    /**
     ********************************************************
     * 函数名: format_array2excel
     * 参数:
     * @param $data 导出的数据
     * @param string $filename 导出的文件名
     * @param $header 在全局变量 $pramas 中必须定义 excel_'.$header.'_export相应的数组作为导出表头
     *               'excel_user_export' => [
     *               'A'=>['key'=>'user_realname','label'=>'姓名'],
     *               "B"=>['key'=>'user_name','label'=>'帐号'],
     *               "C"=>['key'=>"user_dept",'label'=>"部门"],
     *               "D"=>['key'=>'grade_id','label'=>'职位']
     *               ],
     * 函数描述:把数组导出到Excel
     *******************************************************
     */
    function format_array2excel($data,$filename='Excel',$header){
        require dirname(dirname(__FILE__)).'/components/PHPExcel/PHPExcel.php';
        date_default_timezone_set('Europe/London');
        $header = Yii::$app->params['excel_'.$header.'_export'];
        $grede_arr = Yii::$app->params['grade_arr'];
        $objPHPExcel = new \PHPExcel();
        /*以下是一些设置 ,什么作者  标题啊之类的*/
        $objPHPExcel->getProperties()->setCreator("Hsuanyuen.chenyan")
            ->setLastModifiedBy("Hsuanyuen.chenyan")
            ->setTitle("用户导出")
            ->setSubject("数据EXCEL导出")
            ->setDescription("备份数据")
            ->setKeywords("excel")
            ->setCategory("数据导出");
        /*以下就是对处理Excel里的数据, 横着取数据,主要是这一步,其他基本都不要改*/
        foreach ($header as $k => $v ){
            //Excel的第A列,uid是你查出数组的键值,下面以此类推
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($k.'1', $v['label']);
            $keys[$k]=$v['key'];
        }
        foreach($data as $k => $v){
            $num= $k+2;
            foreach ($header as $kk => $vv ) {
                //Excel的第A列,uid是你查出数组的键值,下面以此类推
                $objPHPExcel->setActiveSheetIndex()->setCellValue($kk . $num, $v[$vv['key']]);
            }
        }
        $objPHPExcel->getActiveSheet()->setTitle('User');
        $objPHPExcel->setActiveSheetIndex(0);
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="'.$filename.'.xls"');
        header('Cache-Control: max-age=0');
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        exit;
    }

待完善文档

您需要登录后才可以回复。登录 | 立即注册