TrendLineTest.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Chart;
  3. use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
  4. use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter;
  5. use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
  6. class TrendLineTest extends AbstractFunctional
  7. {
  8. private const DIRECTORY = 'samples' . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR;
  9. public function readCharts(XlsxReader $reader): void
  10. {
  11. $reader->setIncludeCharts(true);
  12. }
  13. public function writeCharts(XlsxWriter $writer): void
  14. {
  15. $writer->setIncludeCharts(true);
  16. }
  17. public function testTrendLine(): void
  18. {
  19. $file = self::DIRECTORY . '32readwriteScatterChartTrendlines1.xlsx';
  20. $reader = new XlsxReader();
  21. $reader->setIncludeCharts(true);
  22. $spreadsheet = $reader->load($file);
  23. $sheet = $spreadsheet->getSheet(1);
  24. self::assertSame(2, $sheet->getChartCount());
  25. /** @var callable */
  26. $callableReader = [$this, 'readCharts'];
  27. /** @var callable */
  28. $callableWriter = [$this, 'writeCharts'];
  29. $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx', $callableReader, $callableWriter);
  30. $spreadsheet->disconnectWorksheets();
  31. $sheet = $reloadedSpreadsheet->getSheet(1);
  32. self::assertSame('Scatter Chart', $sheet->getTitle());
  33. $charts = $sheet->getChartCollection();
  34. self::assertCount(2, $charts);
  35. $chart = $charts[0];
  36. self::assertNotNull($chart);
  37. $plotArea = $chart->getPlotArea();
  38. self::assertNotNull($plotArea);
  39. $plotSeriesArray = $plotArea->getPlotGroup();
  40. self::assertCount(1, $plotSeriesArray);
  41. $plotSeries = $plotSeriesArray[0];
  42. $valuesArray = $plotSeries->getPlotValues();
  43. self::assertCount(3, $valuesArray);
  44. self::assertEmpty($valuesArray[0]->getTrendLines());
  45. self::assertEmpty($valuesArray[1]->getTrendLines());
  46. self::assertEmpty($valuesArray[2]->getTrendLines());
  47. $chart = $charts[1];
  48. self::assertNotNull($chart);
  49. $plotArea = $chart->getPlotArea();
  50. self::assertNotNull($plotArea);
  51. $plotSeriesArray = $plotArea->getPlotGroup();
  52. self::assertCount(1, $plotSeriesArray);
  53. $plotSeries = $plotSeriesArray[0];
  54. $valuesArray = $plotSeries->getPlotValues();
  55. self::assertCount(1, $valuesArray);
  56. $trendLines = $valuesArray[0]->getTrendLines();
  57. self::assertCount(3, $trendLines);
  58. $trendLine = $trendLines[0];
  59. self::assertSame('linear', $trendLine->getTrendLineType());
  60. self::assertFalse($trendLine->getDispRSqr());
  61. self::assertFalse($trendLine->getDispEq());
  62. $lineColor = $trendLine->getLineColor();
  63. self::assertSame('accent4', $lineColor->getValue());
  64. self::assertSame('stealth', $trendLine->getLineStyleProperty(['arrow', 'head', 'type']));
  65. self::assertEquals(0.5, $trendLine->getLineStyleProperty('width'));
  66. self::assertSame('', $trendLine->getName());
  67. self::assertSame(0.0, $trendLine->getBackward());
  68. self::assertSame(0.0, $trendLine->getForward());
  69. self::assertSame(0.0, $trendLine->getIntercept());
  70. $trendLine = $trendLines[1];
  71. self::assertSame('poly', $trendLine->getTrendLineType());
  72. self::assertTrue($trendLine->getDispRSqr());
  73. self::assertTrue($trendLine->getDispEq());
  74. $lineColor = $trendLine->getLineColor();
  75. self::assertSame('accent3', $lineColor->getValue());
  76. self::assertNull($trendLine->getLineStyleProperty(['arrow', 'head', 'type']));
  77. self::assertEquals(1.25, $trendLine->getLineStyleProperty('width'));
  78. self::assertSame('metric3 polynomial', $trendLine->getName());
  79. self::assertSame(20.0, $trendLine->getBackward());
  80. self::assertSame(28.0, $trendLine->getForward());
  81. self::assertSame(14400.5, $trendLine->getIntercept());
  82. $trendLine = $trendLines[2];
  83. self::assertSame('movingAvg', $trendLine->getTrendLineType());
  84. self::assertTrue($trendLine->getDispRSqr());
  85. self::assertFalse($trendLine->getDispEq());
  86. $lineColor = $trendLine->getLineColor();
  87. self::assertSame('accent2', $lineColor->getValue());
  88. self::assertNull($trendLine->getLineStyleProperty(['arrow', 'head', 'type']));
  89. self::assertEquals(1.5, $trendLine->getLineStyleProperty('width'));
  90. self::assertSame('', $trendLine->getName());
  91. self::assertSame(0.0, $trendLine->getBackward());
  92. self::assertSame(0.0, $trendLine->getForward());
  93. self::assertSame(0.0, $trendLine->getIntercept());
  94. $reloadedSpreadsheet->disconnectWorksheets();
  95. }
  96. }