Я пытаюсь создать диаграмму через 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);
Теперь у меня есть такой график:
Но мне нужно получить вот так: