qq_28945587 2015-06-12 01:41 采纳率: 0%
浏览 1746

无人能解。。phpexcel生成饼状图,在Windows下正常在Linux下乱码!

生成图片导出时,在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");
  • 写回答

1条回答 默认 最新

  • Jeyzq 2015-06-12 02:42
    关注

    两个系统不一样,有些些微的地方不兼容导致无法正常显示。

    评论

报告相同问题?

悬赏问题

  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换