Добавление элемента таблицы данных в диаграмму с помощью PhpOffice - PullRequest
1 голос
/ 23 апреля 2019

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

https://phpoffice.github.io/PhpSpreadsheet/1.2.0/PhpOffice/PhpSpreadsheet/Chart/DataSeries.html

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

$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
$worksheet->setTitle('Test Data');
$worksheet->fromArray(
    [
        ['2016', 'Value1', 400, 'Value2', 522],
        ['2017', '', 600, '', 253],
        ['2018', '', 800, '', 140],
        ['2019', '', 900, '', 335],
        ['2020', '', 500, '', 200],
    ]
);
$dataSeriesLabels = [
    new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, "'Test Data'!B1", null, 1),
    new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, "'Test Data'!D1", null, 1),
];
$xAxisTickValues = [
    new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING,  "'Test Data'!A1:A5", null, 4),

];
$dataSeriesValues = [
    new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, "'Test Data'!C1:C5", null, 4),
    new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, "'Test Data'!E1:E5", null, 4),
];

$series = new DataSeries(
    DataSeries::TYPE_BARCHART, // plotType
    DataSeries::GROUPING_STACKED, // plotGrouping
    range(0, count($dataSeriesValues) - 1), // plotOrder
    $dataSeriesLabels, // plotLabel
    $xAxisTickValues, // plotCategory
    $dataSeriesValues,        // plotValues
    DataSeries::DIRECTION_COL
);

$plotArea = new PlotArea(null, [$series]);
// Set the chart legend
$legend = new Legend(Legend::POSITION_RIGHT, null, false);

$title = new Title('Test Chart');
$yAxisLabel = new Title('Value ($k1)');

// Create the chart
$chart = new Chart(
    'chart1', // name
    $title, // title
    $legend, // legend
    $plotArea, // plotArea
    true, // plotVisibleOnly
    0, // displayBlanksAs
    null, // xAxisLabel
    $yAxisLabel,  // yAxisLabel
    null,
    null
);

$chart->setTopLeftPosition('A7');
$chart->setBottomRightPosition('H20');

// Add the chart to the worksheet
$sheet1->addChart($chart);

$helper = new Sample();
$filename = $helper->getFilename(__FILE__);
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->setIncludeCharts(true);
$callStartTime = microtime(true);
$writer->save($filename);
$helper->logWrite($writer, $filename, $callStartTime);

Теперь у меня есть такой график:

enter image description here

Но мне нужно получить вот так:

enter image description here

...