Диаграмма PHPExcel, удаленная Microsoft Excel

#excel #phpexcel

#excel #phpexcel

Вопрос:

Я пытаюсь создать диаграмму в файле Excel через PHPExcel..

Я могу создать таблицу datasource для диаграммы.. Выглядит так

введите описание изображения здесь

и я написал код для диаграммы.. Выглядит так..

 $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');
  

И это ошибка, которую выдает мне Excel, когда я пытаюсь открыть документ, созданный этим кодом

введите описание изображения здесь

Почему возникла эта ошибка? Почему Excel говорит, что фигура чертежа была удалена? Любая помощь приветствуется

Ответ №1:

Основная причина, по которой вы получили эту ошибку, заключается в том, что вы переопределили значения графика и включили заголовок. Например, для этих двух строк диапазон должен начинаться с A2 и B2, поскольку A1 и B1 содержат заголовок, а НЕ значения, которые вы хотите отобразить.

Итак, эти две строки:

 $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);
  

Должно быть:

 $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);
  

Это устранит ошибку, но ваша диаграмма все равно не будет отображаться, поскольку вам также необходимо указать местоположение для отображения указанной диаграммы. Поэтому эти две дополнительные строки также необходимо будет добавить:

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

Это устранит ошибку, которую вы получаете, и отсутствие отображаемого графика. Однако я бы рекомендовал создать массив для $values и $ categories вне создания объекта $ series, поскольку это позволило бы отображать больше, чем один столбец данных. На этом веб-сайте есть хороший учебник по созданию диаграмм с использованием PHPExcel

Исправленный код ниже:

 $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');