Как изменить стиль линейной диаграммы, сгенерированной с помощью phpexcel?

Я создаю линейную диаграмму, используя пример из библиотеки Github.

То, что я хочу иметь, - это возможность установить несколько настраиваемых стилей для каждой из строк на диаграмме, так как мы делаем это вручную на листе excel, например:

Выберите "Линия" в таблице "Формат данных", затем:

  • Параметры маркерa > Нет
  • Стиль линии > Ширинa > 2.5pt (по умолчанию 1pt)
  • Стиль линии > Сглаженная линия

Как установить три приведенные выше опции для строк, сгенерированных в линейной диаграмме? До сих пор вот мой код для установки макета и серии данных для диаграммы:

$series = new PHPExcel_Chart_DataSeries(
        PHPExcel_Chart_DataSeries::TYPE_LINECHART,
        PHPExcel_Chart_DataSeries::GROUPING_STANDARD,
        range(0, count($dataSeriesValues)-1),       
        $dataseriesLabels,                          
        $xAxisTickValues,                           
        $dataSeriesValues                       
    );

    $layout1 = new PHPExcel_Chart_Layout();
    $layout1->setShowVal(TRUE);

    $plotarea = new PHPExcel_Chart_PlotArea($layout1, array($series));

Может кто-нибудь дать подсказку, поскольку я не могу найти ее в этом примере.

Ответы

Ответ 1

Для вашего первого вопроса, чтобы получить Параметры маркерa > Нет:

В файле PHPExcel/Chart/Renderer/jpgraph.php в строке 287:

$marker = $this->_chart->getPlotArea()->getPlotGroupByIndex($groupID)->getPlotValuesByIndex($i)->getPointMarker();

Измените это на

$marker = 'none';

Чтобы избавиться от маркеров, обратите внимание, что это немного хакерское исправление, обычно оно проходит через все маркеры, и в инструменте нет никакой функции, чтобы установить маркер самостоятельно. (поэтому вы не можете найти его в примерах)

Вы также можете удалить или отредактировать код Excel2007/Chart.php строка 792, здесь вы можете увидеть код if ($plotSeriesMarker), изменить его на "none" или просто удалите эту часть.


Для вашего второго вопроса: Стиль линии > Ширинa > 2,5pt (по умолчанию 1pt)

В файле PHPExcel/Writer/Excel2007/Chart.php
В строка 781 в функции _writePlotGroup вы можете увидеть код построения строки

if ($groupType == PHPExcel_Chart_DataSeries::TYPE_LINECHART) {
    $objWriter->startElement('c:spPr');
        $objWriter->startElement('a:ln');
            $objWriter->writeAttribute('w', 12700);
        $objWriter->endElement();
    $objWriter->endElement();
}

Здесь вы можете изменить ширину, используя, например:

$objWriter->writeAttribute('w', '40000'); 

Для вашего третьего вопроса: Стиль линии > Сглаженная строка

Функция построения PHPExcel_Chart_DataSeries равна

/**
* Create a new PHPExcel_Chart_DataSeries
*/
public function __construct($plotType = null, $plotGrouping = null, $plotOrder = array(), $plotLabel = array(), $plotCategory = array(), $plotValues = array(), $smoothLine = null, $plotStyle = null)

Итак, после вашего $dataSeriesValues вы можете определить значение smoothline и plotStyle.
Передача true в параметр smoothline дает гладкий стиль линии.

Если по какой-то причине это не работает, в Chart.php вы можете найти на строке 272

$objWriter->writeAttribute('val', (integer) $plotGroup->getSmoothLine() );

Измените это на

$objWriter->writeAttribute('val', 1 );

И он должен работать наверняка.

Ответ 2

Во время этого ответа решение вашего первого вопроса; Параметры Marker > None просты и не требуют изменения базового кода. При создании объектов $dataSeriesValues (строка 86) вы можете определить, какой тип маркера вы хотите или "нет".

$dataSeriesValues = array(
new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$B$5', null, 4, array(), 'none'),
new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$5', null, 4, array(), 'none'),
new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$2:$D$5', null, 4, array(), 'none'),
);