六、PHPExcel图形报表
步骤:
① 准备数据;
② 生成线性表的坐标轴刻度;
③ 绘制线性表框架;
④ 将线性表添加到表格中并生成Excel文件。
核心代码:
$arr = array(
array('', '一班', '二班', '三班'),
array('不及格', 20, 30, 40),
array('良好', 30, 50, 55),
array('优秀', 15, 17, 20)
);
//准备数据 直接加载数组填入单元格内
$objSheet->fromArray($arr);
//开始图形代码编写
//取得绘制图表的标签
$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),//三班
);
//取得图表X轴的刻度
$xLabels = array(
new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$4', null, 3),
);
//取得绘图所需的数据
$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);
$title = new PHPExcel_Chart_Title('高一学生成绩分布');
$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, $layout, false);
$areas = new PHPExcel_Chart_PlotArea($layout, $series);
$yTitle = new PHPExcel_Chart_Title('value(人数)'); //生成一个图表
$chart = new PHPExcel_Chart(
'line_char',
$title,
$legend,
$areas,
true,
false,
null,
$yTitle
);
//给定图表所在表格中的位置
$chart->setTopLeftPosition('A7')->setBottomRightPosition('K25');
//将chart添加到sheet中
$objSheet->addChart($chart);
//生成excel文件
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->setIncludeCharts(true);
//浏览器输出
browser_export('Excel2007', 'browser_chart.xlsx');
$objWriter->save('php://output');
运行后得到的实际效果:
tips: 要生成图表,则导出时必须为excel2007及更高的版本!另外就是生成带有图表的excel速度好慢!!!
如果想要生成其他类型的图表,那就好好参考官方文档,多看examples。
七、PHPExcel导入文件
流程:
① 实例化excel读取对象
② 加载excel文件 --> 全部加载 or 选择加载
③ 读取excel文件 --> 全部读取 or 逐行读取
//第一种全部加载并且全部读取 read_all.php
header('Content-Type:text/html;charset=utf-8');
//引入读取excel的类文件
include_once('PHPExcel/PHPExcel/IOFactory.php');
$filename = dirname(__FILE__).'/export1.xls';
//加载文件
$objPHPExcel = PHPExcel_IOFactory::load($filename);
//全部读取
//获取excel文件里有多少个sheet
$sheetCount = $objPHPExcel->getSheetCount();
for($i=0; $i<$sheetCount; $i++){
//读取每个sheet里的数据 全部放入到数组中
$data = $objPHPExcel->getSheet($i)->toArray();
echo '';
print_r($data);
}
//第二种部分加载并且逐行读取 read_single.php
//自动获取文件的类型提供给phpexcel用
$fileType = PHPExcel_IOFactory::identify($filename);
//获取文件读取操作对象
$objReader = PHPExcel_IOFactory::createReader($fileType);
$sheetName = array('1年级','2年级');
//只加载指定的sheet
$objReader->setLoadSheetsOnly($sheetName);
//加载文件
$objPHPExcel = $objReader->load($filename);
//逐行读取,循环取sheet
foreach ($objPHPExcel->getWorksheetIterator() as $sheet) {
//逐行处理
foreach ($sheet->getRowIterator() as $row) {
//逐列读取 剔除表头
if($row->getRowIndex()<2){
continue;
}
foreach ($row->getCellIterator() as $cell) {
//获取单元格数据
$data = $cell->getValue();
echo $data;
}
echo '
';
}
echo '
';
}
八、总结
启用缓存
默认 --> 按cell占用PHP内存
cache_in_memory_serialized --> 序列化存放PHP内存
cache_in_memory_gzip --> 进一步压缩
cache_in_memory_discISAM --> 存放于硬盘
cache_in_memory_phpTemp --> 存放于临时文件夹
cache_in_memory_memcache --> 存放于memcache中
具体如何使用,可以参考开发者文档。