tomgif
@tomgif
Веб-разработчик

Как сделать лепестковую диаграмму при помощи PHPExcel?

Пытаюсь построить диаграмму и столкнулся с 2мя проблемами. На примере этого кода.

1) MS Office по какой-то причине выдает ошибку
d2266f48d8584123b24bf9c168379926.png.
Libre Calc открывает без проблем.

2) Следующая проблема связана с данными
Каким образом для построения данных можно указать отдельные ячейки, к примеру
new \PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$1', NULL, 1); // работает
new \PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$A$2:$A$13', NULL, 12); //работает
new \PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$A$2;Worksheet!$D$1', NULL, 12); //не работает
  • Вопрос задан
  • 313 просмотров
Решения вопроса 1
tomgif
@tomgif Автор вопроса
Веб-разработчик
Проблема #1 решилась изменением параметров в конструкторе
Было
$series = new \PHPExcel_Chart_DataSeries(
	\PHPExcel_Chart_DataSeries::TYPE_RADARCHART,	
	NULL,
	range(0, count($dataSeriesValues)-1),
	$dataseriesLabels,
	$xAxisTickValues,
	$dataSeriesValues,
	NULL,
	\PHPExcel_Chart_DataSeries::STYLE_LINEMARKER
);


Стало
$series = new \PHPExcel_Chart_DataSeries(
	\PHPExcel_Chart_DataSeries::TYPE_RADARCHART,	
	NULL,
	range(0, count($dataSeriesValues)-1),
	$dataseriesLabels,
	$xAxisTickValues,
	$dataSeriesValues,
	NULL,
	NULL, // добавили 1 параметр из конструктора (plot direction)
	\PHPExcel_Chart_DataSeries::STYLE_MARKER //изменили маркер
);


Проблема #2 связана с тем, что, по-умолчанию, указание не смежных ячеек не проходит валидацию. Решение подобралось не совсем очевидное. Для начала необходимо средствами PhpExcel создать именованный диапазон (NamedRange) и затем передать его в DataSeriesValues.
...
//создаём NamedRange
$objPHPExcel->addNamedRange( 
  new \PHPExcel_NamedRange(
    'testRange', 
    $objPHPExcel->getActiveSheet(), 
    'A1,B2,C3'
  ) 
);

//передаём в dsv
$dataSeriesValues[] = new \PHPExcel_Chart_DataSeriesValues('Number', 'testRange', NULL, 1);
...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы