phpspreadsheet - линии без маркеров на графике

Я использую phpspreadsheet для создания линейных диаграмм. Почти все в порядке, но я не понимаю, как изменить стиль сюжета.

Вот что у меня есть:

function createChart($sheet, $sheetname, $data) {

    $count = $data["custom"]["count"];

    $sheet->getColumnDimensionByColumn(1)->setAutoSize(true);
    $sheet->setCellValueByColumnAndRow(1, 1, $data["custom"]["type"]);


    for($j=0; $j < $count; $j++)
        $sheet->setCellValueByColumnAndRow(1, $j + 2, $data["custom"]["dates"][$j]);

    for($i=0; $i< count($data["series"]); $i++) {

        $sheet->setCellValueByColumnAndRow($i+2, 1, $data["series"][$i]["name"]);
        $sheet->getColumnDimensionByColumn($i+2)->setAutoSize(true);

        for($j=0; $j < $count; $j++)
        {

            $value = $data["series"][$i]["data"][$j] ? $data["series"][$i]["data"][$j] : 0;
            $sheet->setCellValueByColumnAndRow($i+2, $j + 2, $value);
        }
    }

    $dsl=array();

    for($i=0; $i< count($data["series"]); $i++) {
        $series = new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, $sheetname . '!' .
         $sheet->getCellByColumnAndRow($i+2, 1)->getCoordinate(), NULL, 1, [], NULL, NULL);
        array_push($dsl, $series);
    }

    $xal=array(
        new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, $sheetname . '!'.
            $sheet->getCellByColumnAndRow(1, 2)->getCoordinate() . ':' .
            $sheet->getCellByColumnAndRow(1, $count + 2)->getCoordinate()  , NULL, $count)
    );

    $dsv = array();

    for($i=0; $i< count($data["series"]); $i++) {
        $series = new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, $sheetname . '!'.
            $sheet->getCellByColumnAndRow($i+2, 2)->getCoordinate() . ':' .
            $sheet->getCellByColumnAndRow($i+2, $count + 2)->getCoordinate()  , NULL, $count);
        array_push($dsv, $series);
    }

    $type = "";

    switch($data["series"][0]["type"]) {

        case CHART_TYPE_BARCHART:
            $type = DataSeries::TYPE_BARCHART;
        break;
        case CHART_TYPE_LINECHART:
            $type = DataSeries::TYPE_LINECHART;
        break;
        default:
          $type = DataSeries::TYPE_LINECHART;  
    }

    $ds = new DataSeries(
        $type,
        DataSeries::GROUPING_STANDARD,
        range(0, count($dsv)-1),
        $dsl,
        $xal,
        $dsv,
        null,
        true,
        DataSeries::STYLE_MARKER
    );

    $pa = new PlotArea(NULL, array($ds));


    $legend = new Legend(Legend::POSITION_BOTTOM, NULL, false);

    $title = new Title($data["title"]["text"]);


    $chart = new Chart(
        'chart1',
        $title,
        $legend,
        $pa,
        0,
        0,
        NULL,
        NULL
    );

    $chart->setTopLeftPosition( $sheet->getCellByColumnAndRow(count($data["series"]) + 3, 1)->getCoordinate());
    $chart->setBottomRightPosition($sheet->getCellByColumnAndRow(count($data["series"]) + 17, 40)->getCoordinate());

    $sheet->addChart($chart);

}

В частности, я хотел бы рисовать линии без маркеров.

Я попытался передать все возможные значения параметру $plotStyle конструктора Dataseries, но это не дало никакого эффекта.

Я знаю из документации API, что существует Properties, который определяет множество констант, влияющих на стиль диаграммы, но я не понимаю, как его использовать, поскольку другие классы, похоже, на него не ссылаются.

Я также знаю из этого вопроса, что можно установить свойства стиля документа, который создано, это правильный путь? Как перейти к свойствам диаграммы?


person amorcian    schedule 26.06.2018    source источник


Ответы (1)


Я сам нашел. Все, что мне нужно было сделать, это передать строку "none" параметру $marker конструктора DataSeriesValues:

DataSeriesValues::__construct(
    string $dataType = self::DATASERIES_TYPE_NUMBER,  
    string $dataSource = null
    , null|mixed $formatCode = null,
    int $pointCount = 0,
    mixed $dataValues = [],
    null|mixed $marker = null,
    null|string $fillColor = null
) 

Таким образом, соответствующая часть моего кода становится:

for($i=0; $i< count($data["series"]); $i++) {
    $series = new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, $sheetname . '!'.
        $sheet->getCellByColumnAndRow($i+2, 2)->getCoordinate() . ':' .
        $sheet->getCellByColumnAndRow($i+2, $count + 2)->getCoordinate()  , NULL, $count, [], "none");
    array_push($dsv, $series);
}
person amorcian    schedule 29.06.2018