PhpExcel大全

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