PHPSpreadsheet-图表数据系列中的自定义颜色

问题描述 投票:0回答:1

使用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文件,除了“绘图损坏”之外没有问题。

php excel phpexcel phpspreadsheet phpoffice
1个回答
0
投票

通过将0替换为'gap'解决了我的问题,似乎最近的推送将预期的int'0'更改为字符串'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#diff-0fa257b790aee274c5c82d3156288e94

© www.soinside.com 2019 - 2024. All rights reserved.