HuangFeiLong 2018-01-17 13:33:35 2707次浏览 4条评论 9 0 0
  1. 导出Excel表格
  2. 导出效果
  3. Excle导入
  4. 导入效果
  5. 欢迎大家参考学习,相互学习

导出Excel表格

public function actionUpexcel()
{
    $objPHPExcel = new \PHPExcel();

    //设置文件的一些属性,在xls文件——>属性——>详细信息里可以看到这些值,xml表格里是没有这些值的
    $objPHPExcel
          ->getProperties()  //获得文件属性对象,给下文提供设置资源
          ->setCreator( "MaartenBalliauw")             //设置文件的创建者
          ->setLastModifiedBy( "MaartenBalliauw")       //设置最后修改者
          ->setTitle( "Office2007 XLSX Test Document" )    //设置标题
          ->setSubject( "Office2007 XLSX Test Document" )  //设置主题
          ->setDescription( "Test document for Office2007 XLSX, generated using PHP classes.") //设置备注
          ->setKeywords( "office 2007 openxmlphp")        //设置标记
          ->setCategory( "Test resultfile");                //设置类别
    // 位置aaa *为下文代码位置提供锚
    //给表格添加数据

    $data=\common\models\SchoolRule::find()->all();//数据库取出数据
    /*echo "<pre>";
    var_dump($data);
    echo "</pre>";
    exit();*/

    $objPHPExcel->setActiveSheetIndex(0)//表头的信息
    ->setCellValue('A1', "编号")
    ->setCellValue('B1', "所属上级")
    ->setCellValue('C1', "路由名称")
    ->setCellValue('D1', "菜单标题")
    ->setCellValue('E1', "状态");
    $i=2;
    foreach ($data as $key => $value) {
        $objPHPExcel->getActiveSheet()             //     设置第一个内置表(一个xls文件里可以有多个表)为活动的
               ->setCellValue( 'A'.$i, $value['id'] )       //给表的单元格设置数据
               ->setCellValue( 'B'.$i, $value['pid'] )      //数据格式可以为字符串
               ->setCellValue( 'C'.$i, $value['route'])            //数字型
               ->setCellValue( 'D'.$i, $value['title'] )            //
               ->setCellValue( 'E'.$i, $value['condition'] )           //布尔型
               ->setCellValue( 'F'.$i, $value['status'] );
        $i++;
    }

    //公式

    //得到当前活动的表,注意下文教程中会经常用到$objActSheet
    $objActSheet =$objPHPExcel->getActiveSheet();
    // 位置bbb *为下文代码位置提供锚
    //给当前活动的表设置名称
    $objActSheet->setTitle('Simple2222');
    //代码还没有结束,可以复制下面的代码来决定我们将要做什么

    //我们将要做的是
    //1,直接生成一个文件
    $objWriter =\PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    $objWriter->save('myexchel.xlsx');
    header('Content-Type:application/vnd.ms-excel');
    header('Content-Disposition:attachment;filename="01simple.xls"');
    header('Cache-Control:max-age=0');
    $objWriter =\PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');
    return $this->render($this->actionID);
}

导出效果

QQ图片20180117164300.png

Excle导入

public function actionUpload()//excel导入
{
    $model = new \common\models\Excel();  
    $ok = "";  
    if ($model->load(Yii::$app->request->post())) {  
        $file = UploadedFile::getInstance($model, 'icon');  //获取上传的文件实例  

    if ($file) {   
        $filename = 'uploads/'.date('Y-m-d',time()).'_'.rand(1,9999).".". $file->extension;  
        $file->saveAs($filename);   //保存文件  
        /*exit;
        $format = $file->extension;*/  
        if(in_array($file->extension,array('xls','xlsx'))){  
                /*$excelFile = Yii::getAlias('@web/www/uploads'.$filename.'');*///获取文件名  
                $fileType   = \PHPExcel_IOFactory::identify($filename); //文件名自动判断文件类型  
                $excelReader  = \PHPExcel_IOFactory::createReader($fileType);  


                $phpexcel    = $excelReader->load($filename)->getSheet(0);//载入文件并获取第一个sheet  
                $total_line  = $phpexcel->getHighestRow();//总行数  
                $total_column= $phpexcel->getHighestColumn();//总列数   

                if($total_line > 1){  
                    for($row = 2;$row <= $total_line; $row++){  
                        $data = array();  
                        for($column = 'A'; $column <= $total_column; $column++){  
                            $data[] = trim($phpexcel->getCell($column.$row)->getValue());  
                        } 
                        //一行行的插入数据库操作
                        $info=Yii::$app->db->createCommand()->insert('school_rule', [
                                                            'pid' => $data['1'],
                                                            'route' => $data['2'],
                                                            'title' => $data['3'],
                                                            'condition' => $data['4'],
                                                            'status' => $data['5'],
                                                        ])->execute();
                        if ($info) {  
                            $ok = 1;  
                        }


                    }


                    /*exit(); */  
                }  
                if ($ok == 1){  
                    $this->redirect(array('index'));  
                } else{  
                    echo "<script>alert('操作失败');window.history.back();</script>";  
                }  
            }  
        }       

    }else{
        return $this->render($this->actionID,[
            'model'=>$model
            ]);
    }

}

导入效果

QQ图片20180117163943.png

欢迎大家参考学习,相互学习

有什么问题可以 加QQ:602643358 记得备注一下。谢谢!

  • 评论于 2018-02-02 11:02 举报

    批量导入比较好

  • 评论于 2018-02-05 10:06 举报

    官方写着phpexcel已经并入PhpSpreadsheet项目,不再更新,楼主可以发个PhpSpreadsheet教程吗?

    1 条回复
    评论于 2018-02-07 14:38 回复

    这个PhpSpreadsheet我没有了解过

  • 评论于 2018-02-22 17:20 举报

    好东西,但是实战时导出还是得分次导出合理些,如果数据量多的话。

  • 评论于 2018-04-22 11:55 举报

    $model = new \common\models\Excel(); 能不能看一下这个文件

您需要登录后才可以评论。登录 | 立即注册