PHPSpreadsheet генерирует неверный файл с диаграммами - PullRequest
1 голос
/ 11 января 2020

Миграция существующего / рабочего приложения с PHPExcel (phpoffice/phpexcel: 1.8.0) на PHPSpreadsheet, и возникла проблема при создании файла Excel, содержащего одну или несколько диаграмм .

Без каких-либо вызовов addChart созданный файл действителен, но как только я добавлю диаграмму, полученный файл станет недействительным. Excel пытается восстановить данные, но это успешно, но без диаграммы.

Инструмент восстановления Excel показывает:

Excel completed file level validation and repair. 
Some parts of this workbook may have been repaired or discarded.
Removed Part: /xl/drawings/drawing1.xml part.  (Drawing shape)

Текущее использование: PHP 7.1 и phpoffice/phpspreadsheet: "1.10.1"

Мой код очень похож на Пример для PieChart, который я пытаюсь добавить.

Часть кода, который генерирует PieChart:

  • $ageCounterRowIndex имеет значение 6
  • $expectedPointCount имеет значение 4
  • Мои значения тиков находятся в D3:D6
  • Мои значения находятся в E3:E6
$dataSeriesLabels = [];

$xAxisTickValues = [
    new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, "$quotedSheetTitle\$D\$3:\$D\$$ageCounterRowIndex", $expectedPointCount)
];

$dataSeriesValues = [
    new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, "$quotedSheetTitle\$E\$3:\$E\$$ageCounterRowIndex", $expectedPointCount),
];

$dataSeries = new DataSeries(
    DataSeries::TYPE_PIECHART,
    NULL, 
    range(0, count($dataSeriesValues) - 1), 
    $dataSeriesLabels, 
    $xAxisTickValues, 
    $dataSeriesValues 
);

$pieLayout = new Layout();
$pieLayout->setShowVal(TRUE)->setShowPercent(TRUE);

$plotArea = new PlotArea($pieLayout, [ $dataSeries ]);
$legend = new Legend(Legend::POSITION_RIGHT, NULL, FALSE);

$chart = new Chart(
    'piechart_' . ($sheetIndex - 1), 
    null,
    $legend, 
    $plotArea, 
    true, 
    0, 
    NULL, 
    NULL 
);

$chart->setTopLeftPosition('G2');
$chart->setBottomRightPosition('L15');
$sheet->addChart($chart);

1 Ответ

0 голосов
/ 23 апреля 2020

Изменение параметра displayBlanksAs в вызове New Chart с 0 на 'gap' решило эту проблему для меня.

Я нашел это сообщение об ошибке в репозитории PhpSpreadsheet

$chart = new Chart(
    'piechart_' . ($sheetIndex - 1), 
    null,
    $legend, 
    $plotArea, 
    true, 
    0, 
    NULL, 
    NULL 
);

становится

$chart = new Chart(
    'piechart_' . ($sheetIndex - 1), 
    null,
    $legend, 
    $plotArea, 
    true, 
    'gap', 
    NULL, 
    NULL 
);
...