生成图片导出时,在Windows下整成显示,在Linux上导出的文件里只有乱码
但如果只生成表格,都可以正常显示,这个是代码:
include "PHPExcel.php";
include "PHPExcel/Writer/Excel5.php"; //用于输出.xls的
//创建新的对象
$objPHPExcel = new PHPExcel();
$filename=$groname."_".$sclock_time."_".$eclock_time;//名字 系统名_开始时间_结束时间
//保存excel-2007格局
$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); // 非2007格局
$k=0;
$objPHPExcel->setActiveSheetIndex($k);//设置当前的sheet第一个0
//设置标签
$sheet=$objPHPExcel->getActiveSheet();
$sheet->getDefaultRowDimension()->setRowHeight(30);
$sheet->getDefaultColumnDimension()->setWidth(20);
//合并单元格,写值
function stoa($str,$num){
$arr=explode(",", $str);
$arrt=array();
$j=0;
for($i=0;$i<count($arr);$i++){
if($i!=0&&$i%$num==0){$j++;}
$arrt[$j][]=$arr[$i];
}
return $arrt;
}
//合并单元格
$sheet->mergeCells('A1:D1');
$sheet->mergeCells('F1:G1');
$str="A1,系统报警详细,20,A2,主机名称,10,B2,报警描述,10,C2,报警等级,10,D2,报警时间,10,F1,报警频率最高的监控项,20,F2,报警信息描述,10,G2,对应报警次数,10";
$arr=array();
$arr=stoa($str,3);
foreach ($arr as $v) {
//写入内容
$sheet->setCellValue($v[0],$v[1]);
//设置字体
$sheet->getStyle($v[0])->getFont()->setName('Candara');
$sheet->getStyle($v[0])->getFont()->setSize($v[2]);
$sheet->getStyle($v[0])->getFont()->setBold(true);
$sheet->getStyle($v[0])->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
}
//系统报警详细 表1
$j=1;
foreach ($arrnew as $value) {
for($i=1;$i<count($value)+1;$i++){
if($i==1){
$sheet->setCellValue('A'.($j+2),$value[$i-1]);
}elseif($i==2){
$sheet->setCellValue('B'.($j+2),$value[$i-1]);
}elseif($i==3){
$sheet->setCellValue('C'.($j+2),$value[$i-1]);
}elseif($i==4){
$sheet->setCellValue('D'.($j+2),$value[$i-1]);
}
}
$j++;
}
//报警频率最高的监控项 (前5条)表2
$shownum=5;//显示5条
$k=3;//数据显示F3 G3
$tnum=$shownum+$k;
$u=0; //真实个数
foreach($arrbjs as $v){
if(isset($v['name'])&&isset($v['num'])&&$k<$tnum){
$sheet->setCellValue("F".$k, $v['name']);
$sheet->setCellValue("G".$k, $v['num']);
$u++;
$k++;
}
}
$sheet->setCellValue("F".$k, '其他');
$sheet->setCellValue("G".$k, count($arrbjs)-$u);
//tu
$dataseriesLabels1 = array(
new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$F$1', NULL, 1), // 标题
);
$xAxisTickValues1 = array(
new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$F$3:$F$'.$k, NULL, $u), // 数据名
);
$dataSeriesValues1 = array(
new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$G$3:$G$'.$k, NULL, $u), // 数据
);
// Build the dataseries
$series1 = new PHPExcel_Chart_DataSeries(
PHPExcel_Chart_DataSeries::TYPE_PIECHART, // plotType
PHPExcel_Chart_DataSeries::GROUPING_STANDARD, // plotGrouping //饼图
range(0, count($dataSeriesValues1)-1), // plotOrder 范围
$dataseriesLabels1, // plotLabel 标题
$xAxisTickValues1, // plotCategory 数据名
$dataSeriesValues1 // plotValues 数据
);
// 布局
$layout1 = new PHPExcel_Chart_Layout();
$layout1->setShowVal(TRUE);
$layout1->setShowPercent(TRUE);
// 设置图表的区域
$plotarea1 = new PHPExcel_Chart_PlotArea($layout1, array($series1));
// 设置图表的图例
$legend1 = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, NULL, false);
$title1 = new PHPExcel_Chart_Title('报警频率最高的监控项');
// 创建chart
$chart3 = new PHPExcel_Chart(
'chart3', // name
$title1, // title
$legend1, // legend
$plotarea1, // plotArea
true, // plotVisibleOnly
0, // displayBlanksAs
NULL, // xAxisLabel
NULL // yAxisLabel - Pie charts don't have a Y-Axis
);
// 图出现位置
$k+=2;
$chart3->setTopLeftPosition('F'.$k); //左上角
$k+=18;
$chart3->setBottomRightPosition('H'.$k);//右下角
// 准备输出
$sheet->addChart($chart3);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->setIncludeCharts(TRUE);
// end tu//
//输出信息
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename='.$filename);
header('Cache-Control: max-age=0');
$objWriter->save("php://output");