PHPSpreadsheet - пользовательский цвет в серии данных диаграммы
Использование PHPSpreadsheet для создания собственного линейного графика. У меня есть данные, загруженные в электронную таблицу, и она правильно строит график. Однако я не могу настроить цвет линий на графике. Когда я пытаюсь применить цвет к моей серии, открывается электронная таблица, но есть некоторые искажения, и график не загружается. Excel говорит мне, что он удалил график, чтобы он мог открыть электронную таблицу: "Удаленная часть: /xl/drawings/drawing1.xml часть. (Рисование фигуры)'
Мне не удалось найти в документации какую-либо информацию о пользовательских цветах диаграммы, но она была зафиксирована и включена в проект в начале этого года.
Я проверил исходный код моей версии PHPSpreadsheet, и в ней есть обновленные файлы / классы, которые позволяют настраивать окраску диаграмм.
<?php
require_once '/opt/sites/vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Chart\Chart;
use PhpOffice\PhpSpreadsheet\Chart\DataSeries;
use PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues;
use PhpOffice\PhpSpreadsheet\Chart\Legend;
use PhpOffice\PhpSpreadsheet\Chart\PlotArea;
use PhpOffice\PhpSpreadsheet\Chart\Title;
$phpsheet = new Spreadsheet();
$phpsheet->setActiveSheetIndex(0);
$phpsheet->getActiveSheet()->setTitle('Worksheet');
$file = "report.xlsx";
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=\"".$file."\"");
header('Cache-Control: max-age=0');
$phpsheet->getActiveSheet()->getColumnDimension('A')->setWidth(15);
$phpsheet->getActiveSheet()->getColumnDimension('B')->setWidth(15);
$phpsheet->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$r = 1;
$phpsheet->getActiveSheet()->setCellValue('A' . $r, "Date");
$phpsheet->getActiveSheet()->setCellValue('B' . $r, "Val One");
$phpsheet->getActiveSheet()->setCellValue('C' . $r, "Val Two");
$r++;
while($r<=20)
{
$randNumOne = rand(1,100);
$randNumTwo = rand(1,100);
$phpsheet->getActiveSheet()->setCellValue('A' . $r, "2018-04-".$r);
$phpsheet->getActiveSheet()->setCellValue('B' . $r, $randNumOne);
$phpsheet->getActiveSheet()->setCellValue('C' . $r, $randNumTwo);
$r++;
}
/////////////////////////////////////////////////////////
//////////////////////////Error Here/////////////////////
///If I change the two hex codes to NULL, there is no issue but of course then there is no change in color either.
/////////////////////////////////////////////////////////
//////////////////////////Error Here/////////////////////
$dsl=array(
new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', NULL, 1, [], NULL, "d914e0"), //Cause of the error
new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', NULL, 1, [], NULL, "2ce81b"), //Cause of the error
);
$x = $r - 1;
$xal=array(
new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$'.$r, NULL, $x),
);
$dsv = array(
new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$B$'.$r, NULL, $x),
new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$'.$r, NULL, $x),
);
$ds = new DataSeries(
DataSeries::TYPE_LINECHART,
DataSeries::GROUPING_STANDARD,
range(0, count($dsv)-1),
$dsl,
$xal,
$dsv
);
$pa = new PlotArea(NULL, array($ds));
$legend = new Legend(Legend::POSITION_RIGHT, NULL, false);
$title = new Title('Sample Chart');
$chart = new Chart(
'chart1',
$title,
$legend,
$pa,
0,
0,
NULL,
NULL
);
$chart->setTopLeftPosition('E1');
$chart->setBottomRightPosition('V20');
$phpsheet->getActiveSheet()->addChart($chart);
$Excel_writer = new Xlsx($phpsheet);
ob_end_clean();
$Excel_writer->setIncludeCharts(true);
$Excel_writer->save('php://output');
У меня нет ошибок / предупреждений / проблем на стороне сервера вещей. Все выполняется как положено, и я получаю файл Excel без проблем, кроме "повреждения чертежа".
0 ответов
Исправлена моя проблема, заменив 0 на 'gap', похоже, недавний push изменил ожидаемый int '0' на string 'gap':
$chart = new Chart(
'chart1',
$title,
$legend,
$pa,
0,
'gap', //change here from 0 to gap
NULL,
NULL
);
Нажатие:https://github.com/PHPOffice/PhpSpreadsheet/commit/144a0cabbc572780d0f49db50243f15b104ce26e