美文网首页php
PhpExcel大全

PhpExcel大全

作者: 云窗96 | 来源:发表于2018-08-23 22:08 被阅读0次
    image

    导出excel:

    实例一:数据按年级分sheet显示

    image
    <?php 
    $dir=dirname(__FILE__);
    require $dir."/db.php";//引入mysql操作类文件
    require $dir."/PHPExcel.php";//引入PHPExcel
    $db=new db($phpexcel);//实例化db类 连接数据库
    $objPHPExcel=new PHPExcel();//实例化PHPExcel类, 等同于在桌面上新建一个excel
    for($i=1;$i<=3;$i++){
    
        if($i>1){
            // 默认已创sheet
            $objPHPExcel->createSheet();//创建新的内置表
        }
    
        $objPHPExcel->setActiveSheetIndex($i-1);//把新创建的sheet设定为当前活动sheet
        $objSheet=$objPHPExcel->getActiveSheet();//获取当前活动sheet
        $objSheet->setTitle($i."年级");//给当前活动sheet起个名称
        $data=$db->getDataByGrade($i);//查询每个年级的学生数据
        $objSheet->setCellValue("A1","姓名")->setCellValue("B1","分数")->setCellValue("C1","班级");//填充数据
        $j=2;
        foreach($data as $key=>$val){
                $objSheet->setCellValue("A".$j,$val['username'])->setCellValue("B".$j,$val['score'])->setCellValue("C".$j,$val['class']."班");
                $j++;
        }
    }
    
    
    $objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');//生成excel文件
    //$objWriter->save($dir."/export_1.xls");//保存文件
    browser_export('Excel5','hjy.xls');//输出到浏览器
    $objWriter->save("php://output");
    
    
    function browser_export($type,$filename){
        if($type=="Excel5"){
                header('Content-Type: application/v nd.ms-excel');//告诉浏览器将要输出excel03文件
        }else{
                header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器数据excel07文件
        }
        header('Content-Disposition: attachment;filename="'.$filename.'"');//告诉浏览器将输出文件的名称
        header('Cache-Control: max-age=0');//禁止缓存
    }
    

    ?>

    实例二:数据同sheet显示(样式)

    image
    <?php 
    $dir=dirname(__FILE__);//查找当前脚本所在路径
    require $dir."/db.php";//引入mysql操作类文件
    require $dir."/PHPExcel.php";//引入PHPExcel
    $db=new db($phpexcel);//实例化db类 连接数据库
    $objPHPExcel=new PHPExcel();//实例化PHPExcel类, 等同于在桌面上新建一个excel
    $objSheet=$objPHPExcel->getActiveSheet();//获得当前活动单元格
    
    
    $objSheet->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER)->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//设置excel文件默认水平垂直方向居中
    
    $objSheet->getDefaultStyle()->getFont()->setSize(14)->setName("微软雅黑");//设置默认字体大小和格式
    
    $objSheet->getStyle("A2:Z2")->getFont()->setSize(20)->setBold(true);//设置第二行字体大小和加粗
    $objSheet->getStyle("A3:Z3")->getFont()->setSize(16)->setBold(true);//设置第三行字体大小和加粗
    $objSheet->getDefaultRowDimension()->setRowHeight(30);//设置默认行高
    $objSheet->getRowDimension(2)->setRowHeight(50);//设置第二行行高
    $objSheet->getRowDimension(3)->setRowHeight(40);//设置第三行行高
    $gradeInfo=$db->getAllGrade();//查询所有的年级
    $index=0;
    
    
    foreach($gradeInfo as $g_k=>$g_v){
        $gradeIndex=getCells($index*2);//获取年级信息所在列
        $objSheet->setCellValue($gradeIndex."2","高".$g_v['grade']);
        $classInfo=$db->getClassByGrade($g_v['grade']);//查询每个年级所有的班级
        foreach($classInfo as $c_k=>$c_v){
            $nameIndex=getCells($index*2);//获得每个班级学生姓名所在列位置
            $scoreIndex=getCells($index*2+1);//获得每个班级学生分数所在列位置
            $objSheet->mergeCells($nameIndex."3:".$scoreIndex."3");//合并每个班级的单元格
            $objSheet->getStyle($nameIndex."3:".$scoreIndex."3")->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB('6fc144');//填充班级背景颜色
            $classBorder=getBorderStyle("445cc1");//获取班级边框样式代码
            $objSheet->getStyle($nameIndex."3:".$scoreIndex."3")->applyFromArray($classBorder);//设置每个班级的边框
            $info=$db->getDataByClassGrade($c_v['class'],$g_v['grade']);//查询每个班级的学生信息
            $objSheet->setCellValue($nameIndex."3",$c_v['class']."班");//填充班级信息  
            $objSheet->getStyle($nameIndex)->getAlignment()->setWrapText(true);//设置文字自动换行
            $objSheet->setCellValue($nameIndex."4","姓名\n换行")->setCellValue($scoreIndex."4","分数");   
            $objSheet->getStyle($scoreIndex)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_TEXT);//设置某列单元格格式为文本格式(长度超出显示)
            $j=5;
            foreach($info as $key=>$val){
                $objSheet->setCellValue($nameIndex.$j,$val['username'])->setCellValue($scoreIndex.$j,$val['score']);//填充学生信息
                //$objSheet->setCellValue($nameIndex.$j,$val['username'])->setCellValueExplicit($scoreIndex.$j,$val['score']."12321321321321312",PHPExcel_Cell_DataType::TYPE_STRING);//填充学生信息
                $j++;
            }
            $index++;
        }
        $endGradeIndex=getCells($index*2-1);//获得每个年级的终止单元格
        $objSheet->mergeCells($gradeIndex."2:".$endGradeIndex."2");//合并每个年级的单元格
        $objSheet->getStyle($gradeIndex."2:".$endGradeIndex."2")->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB('c1b644');//填充年级背景颜色
        $gradeBorder=getBorderStyle("c144b1");//获取年级边框样式代码
        $objSheet->getStyle($gradeIndex."2:".$endGradeIndex."2")->applyFromArray($gradeBorder);//设置每个年级的边框
    }
    
    
    $objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');//生成excel文件
    //$objWriter->save($dir."/export_1.xls");//保存文件
    browser_export('Excel5','browser_excel03.xls');//输出到浏览器
    $objWriter->save("php://output");
    
    
    function browser_export($type,$filename){
        if($type=="Excel5"){
                header('Content-Type: application/vnd.ms-excel');//告诉浏览器将要输出excel03文件
        }else{
                header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器数据excel07文件
        }
        header('Content-Disposition: attachment;filename="'.$filename.'"');//告诉浏览器将输出文件的名称
        header('Cache-Control: max-age=0');//禁止缓存
    }
    
    /**
    **根据下标获得单元格所在列位置
    **/
        function getCells($index){
            $arr=range('A','Z');
            return $arr[$index];
        }
    
    /**
    **获取边框样式代码
    **/
        function getBorderStyle($color){
                $styleArray = array(
                    'borders' => array(
                        'outline' => array(
                            'style' => PHPExcel_Style_Border::BORDER_THICK,
                            'color' => array('rgb' => $color),
                        ),
                    ),
                );
                return $styleArray;
        }
    
    
      ?>
    

    实例三:显示线状excel

    image
    <?php 
    $dir=dirname(__FILE__);//查找当前脚本所在路径
    require $dir."/db.php";//引入mysql操作类文件
    require $dir."/PHPExcel.php";//引入PHPExcel
    $db=new db($phpexcel);//实例化db类 连接数据库
    $objPHPExcel=new PHPExcel();//实例化PHPExcel类, 等同于在桌面上新建一个excel
    $objSheet=$objPHPExcel->getActiveSheet();//获得当前活动sheet
    
    $array=array(
            array("","一班","二班","三班"),
            array("不及格",20,30,40),
            array("良好",30,50,55),
            array("优秀",15,17,20)
    );//准备数据
    $objSheet->fromArray($array);//直接加载数组填充进单元格内
    //开始图表代码编写
    $labels=array(
        new PHPExcel_Chart_DataSeriesValues('String','Worksheet!$B$1',null,1),//一班
        new PHPExcel_Chart_DataSeriesValues('String','Worksheet!$C$1',null,1),//二班
        new PHPExcel_Chart_DataSeriesValues('String','Worksheet!$D$1',null,1),//三班
    );//先取得绘制图表的标签
    $xLabels=array(
        new PHPExcel_Chart_DataSeriesValues('String','Worksheet!$A$2:$A$4',null,3)//取得图表X轴的刻度
    );
    
    
    $datas=array(
        new PHPExcel_Chart_DataSeriesValues('Number','Worksheet!$B$2:$B$4',null,3),//取一班的数据
        new PHPExcel_Chart_DataSeriesValues('Number','Worksheet!$C$2:$C$4',null,3),//取二班的数据
        new PHPExcel_Chart_DataSeriesValues('Number','Worksheet!$D$2:$D$4',null,3)//取三班的数据
    );//取得绘图所需的数据
    
    $series=array(
        new PHPExcel_Chart_DataSeries(
            PHPExcel_Chart_DataSeries::TYPE_LINECHART,
            PHPExcel_Chart_DataSeries::GROUPING_STANDARD,
            range(0,count($labels)-1),
            $labels,
            $xLabels,
            $datas
        )
    );//根据取得的东西做出一个图表的框架
    $layout=new PHPExcel_Chart_Layout();
    $layout->setShowVal(true);
    $areas=new PHPExcel_Chart_PlotArea($layout,$series);
    $legend=new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT,$layout,false); //在右边
    $title=new PHPExcel_Chart_Title("高一学生成绩分布");
    $ytitle=new PHPExcel_Chart_Title("value(人数)"); 
    
    
    $chart=new PHPExcel_Chart(
        'line_chart',
        $title,
        $legend,
        $areas,
        true,
        false,
        null,
        $ytitle
    );//生成一个图表
    $chart->setTopLeftPosition("A7")->setBottomRightPosition("K25");//给定图表所在表格中的位置
    
    $objSheet->addChart($chart);//将chart添加到表格中
    
    
    
    $objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');//生成excel文件
    $objWriter->setIncludeCharts(true);
    
    //$objWriter->save($dir."/export_1.xls");//保存文件
    browser_export('Excel2007','browser_chart.xlsx');//输出到浏览器
    $objWriter->save("php://output");
    
    
    function browser_export($type,$filename){
        if($type=="Excel5"){
                header('Content-Type: application/vnd.ms-excel');//告诉浏览器将要输出excel03文件
        }else{
                header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器数据excel07文件
        }
        header('Content-Disposition: attachment;filename="'.$filename.'"');//告诉浏览器将输出文件的名称
        header('Cache-Control: max-age=0');//禁止缓存
    }
    

    ?>

    导入excel

    实例三:读取execl数据

    <?php 
    header("Content-Type:text/html;charset=utf-8");
    $dir=dirname(__FILE__);//找到当前脚本所在路径
    require $dir."/PHPExcel/PHPExcel/IOFactory.php";//引入读取excel的类文件
    $filename=$dir."/export_1.xls";
    $fileType=PHPExcel_IOFactory::identify($filename);//自动获取文件的类型提供给phpexcel用
    $objReader=PHPExcel_IOFactory::createReader($fileType);//获取文件读取操作对象
    $sheetName=array("2年级","3年级");
    $objReader->setLoadSheetsOnly($sheetName);//只加载指定的sheet
    
    
    $objPHPExcel=$objReader->load($filename);//加载文件
    /**$sheetCount=$objPHPExcel->getSheetCount();//获取excel文件里有多少个sheet
    for($i=0;$i<$sheetCount;$i++){
        $data=$objPHPExcel->getSheet($i)->toArray();//读取每个sheet里的数据 全部放入到数组中
        print_r($data);
    }**/
    foreach($objPHPExcel->getWorksheetIterator() as $sheet){//循环取sheet
            foreach($sheet->getRowIterator() as $row){//逐行处理
                    if($row->getRowIndex()<2){
                        continue;
                    }
                    foreach($row->getCellIterator() as $cell){//逐列读取
                            $data=$cell->getValue();//获取单元格数据
                            echo $data." ";
                    }
                    echo '<br/>';
            }
            echo '<br/>';
    }
    exit;
      ?>
    

    数据量大时尽可能缓存

    image image

    相关文章

      网友评论

        本文标题:PhpExcel大全

        本文链接:https://www.haomeiwen.com/subject/aghviftx.html