2016-10-10 3 views
0

Ich versuche, ein Diagramm auf Excel-Datei über PHPExcel zu machen ..PHPExcel Diagramm gelöscht von Microsoft Excel

ich die Tabelle für die datasource für das Diagramm machen .. so aussehen

enter image description here

und ich habe Code schreiben für das Diagramm .. so aussehen ..

$values = new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$1:$B$11', NULL, 11); 
$categories = new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$1:$A$11', NULL, 11); 
$series = new PHPExcel_Chart_DataSeries(
    PHPExcel_Chart_DataSeries::TYPE_LINECHART,  // plotType 
    PHPExcel_Chart_DataSeries::GROUPING_STANDARD, // plotGrouping 
    range(0, count($values)-1),      // plotOrder 
    array(),           // plotLabel 
    array($categories),        // plotCategory 
    array($values)        // plotValues 
); 
$series->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_COL); 
$plotarea = new PHPExcel_Chart_PlotArea(NULL, array($series)); 
$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, NULL,false); 
$title = new PHPExcel_Chart_Title('Test Column Chart'); 
$yAxisLabel = new PHPExcel_Chart_Title('Value ($k)'); 

$chart = new PHPExcel_Chart(
    'chart1',   // name 
    $title,    // title 
    $legend,   // legend 
    $plotarea,   // plotArea 
    true,    // plotVisibleOnly 
    0,     // displayBlanksAs 
    NULL,    // xAxisLabel 
    $yAxisLabel   // yAxisLabel 
); 
$objPHPExcel->getActiveSheet()->addChart($chart); 

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
$objWriter->setIncludeCharts(TRUE); 

header('Content-type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment; filename="aOSalesPerformance.xlsx"'); 
$objWriter->save('php://output'); 

und das ist der Fehler, den mir übertreffen geben, wenn ich zu öffnen bin versucht, das Dokument, das von diesem Code generiert

enter image description here

Warum kam dieser Fehler? Warum Excel sagen, Zeichnungsform wurde entfernt? Hilfefunktionen

Antwort

0

Der Hauptgrund, warum Sie diesen Fehler erhalten haben, ist, dass Sie die Plotwerte über-ausgewählt und die Kopfzeile hinzugefügt haben. Mit diesen beiden Zeilen sollte der Bereich beispielsweise bei A2 und B2 beginnen, da A1 und B1 die Header- und NOT-Werte enthalten, die Sie plotten möchten.

Also diese beiden Zeilen:

$values = new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$1:$B$11', NULL, 11); 
$categories = new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$1:$A$11', NULL, 11); 

Sollte sein:

$values = new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$B$11', NULL, 11); 
$categories = new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$11', NULL, 11); 

, kümmert sich um den Fehler nehmen, aber das Diagramm noch nicht angezeigt werden, da Sie auch einen Ort angeben müssen damit das Diagramm angezeigt wird. Also diese beiden zusätzlichen Linien werden ebenfalls hinzugefügt werden müssen:

$chart->setTopLeftPosition('A20'); 
$chart->setBottomRightPosition('L50'); 

, die Pflege des Fehlers nehmen Sie empfangen und den Mangel an angezeigten Grafik. Ich würde jedoch empfehlen, das Array für $ values ​​und $ categories außerhalb des $ series-Objekts zu erstellen, da dann mehr als nur eine Datenspalte gezeichnet werden kann. This website has a good tutorial on creating charts using PHPExcel

Corrected Code unten:

$values = array(); 
$values[] = new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$B$11', NULL, 11); 
$categories = array(); 
$categories[] = new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$11', NULL, 11); 
$series = new PHPExcel_Chart_DataSeries(
    PHPExcel_Chart_DataSeries::TYPE_LINECHART,  // plotType 
    PHPExcel_Chart_DataSeries::GROUPING_STANDARD, // plotGrouping 
    range(0, count($values)-1),      // plotOrder 
    null,           // plotLabel 
    $categories,        // plotCategory 
    $values        // plotValues 
); 
$series->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_COL); 
$plotarea = new PHPExcel_Chart_PlotArea(NULL, array($series)); 
$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, NULL,false); 
$title = new PHPExcel_Chart_Title('Test Column Chart'); 
$k="y axis"; 
$yAxisLabel = new PHPExcel_Chart_Title('Value ($k)'); 

$chart = new PHPExcel_Chart(
    'chart1',   // name 
    $title,    // title 
    $legend,   // legend 
    $plotarea,   // plotArea 
    true,    // plotVisibleOnly 
    0,     // displayBlanksAs 
    NULL,    // xAxisLabel 
    $yAxisLabel   // yAxisLabel 
); 

//Location where chart will be displayed 
$chart->setTopLeftPosition('A20'); 
$chart->setBottomRightPosition('L50'); 

$objPHPExcel->getActiveSheet()->addChart($chart); 

// Set active sheet index to the first sheet, so Excel opens this as the first sheet 
$objPHPExcel->setActiveSheetIndex(0); 

// Redirect output to a client’s web browser (Excel2007) 
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
header('Content-Disposition: attachment;filename="aOSalesPerformance.xlsx"'); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->setIncludeCharts(TRUE); 
$objWriter->save('php://output');