Charts32ScatterTest.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Chart;
  3. use PhpOffice\PhpSpreadsheet\Chart\ChartColor;
  4. use PhpOffice\PhpSpreadsheet\Chart\Properties;
  5. use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
  6. use PhpOffice\PhpSpreadsheet\RichText\RichText;
  7. use PhpOffice\PhpSpreadsheet\RichText\Run;
  8. use PhpOffice\PhpSpreadsheet\Style\Font;
  9. use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter;
  10. use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
  11. class Charts32ScatterTest extends AbstractFunctional
  12. {
  13. private const DIRECTORY = 'samples' . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR;
  14. public function readCharts(XlsxReader $reader): void
  15. {
  16. $reader->setIncludeCharts(true);
  17. }
  18. public function writeCharts(XlsxWriter $writer): void
  19. {
  20. $writer->setIncludeCharts(true);
  21. }
  22. public function testScatter1(): void
  23. {
  24. $file = self::DIRECTORY . '32readwriteScatterChart1.xlsx';
  25. $reader = new XlsxReader();
  26. $reader->setIncludeCharts(true);
  27. $spreadsheet = $reader->load($file);
  28. $sheet = $spreadsheet->getActiveSheet();
  29. self::assertSame(1, $sheet->getChartCount());
  30. /** @var callable */
  31. $callableReader = [$this, 'readCharts'];
  32. /** @var callable */
  33. $callableWriter = [$this, 'writeCharts'];
  34. $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx', $callableReader, $callableWriter);
  35. $spreadsheet->disconnectWorksheets();
  36. $sheet = $reloadedSpreadsheet->getActiveSheet();
  37. self::assertSame('Charts', $sheet->getTitle());
  38. $charts = $sheet->getChartCollection();
  39. self::assertCount(1, $charts);
  40. $chart = $charts[0];
  41. self::assertNotNull($chart);
  42. $title = $chart->getTitle();
  43. self::assertNotNull($title);
  44. $captionArray = $title->getCaption();
  45. self::assertIsArray($captionArray);
  46. self::assertCount(1, $captionArray);
  47. $caption = $captionArray[0];
  48. self::assertInstanceOf(RichText::class, $caption);
  49. self::assertSame('Scatter - No Join and Markers', $caption->getPlainText());
  50. $elements = $caption->getRichTextElements();
  51. self::assertCount(1, $elements);
  52. $run = $elements[0];
  53. self::assertInstanceOf(Run::class, $run);
  54. $font = $run->getFont();
  55. self::assertInstanceOf(Font::class, $font);
  56. self::assertSame('Calibri', $font->getLatin());
  57. self::assertEquals(12, $font->getSize());
  58. self::assertTrue($font->getBold());
  59. self::assertFalse($font->getItalic());
  60. self::assertFalse($font->getSuperscript());
  61. self::assertFalse($font->getSubscript());
  62. self::assertFalse($font->getStrikethrough());
  63. self::assertSame('none', $font->getUnderline());
  64. $chartColor = $font->getChartColor();
  65. self::assertNotNull($chartColor);
  66. self::assertSame('000000', $chartColor->getValue());
  67. self::assertSame('srgbClr', $chartColor->getType());
  68. $plotArea = $chart->getPlotArea();
  69. self::assertNotNull($plotArea);
  70. $plotSeries = $plotArea->getPlotGroup();
  71. self::assertCount(1, $plotSeries);
  72. $dataSeries = $plotSeries[0];
  73. $plotValues = $dataSeries->getPlotValues();
  74. self::assertCount(3, $plotValues);
  75. $values = $plotValues[0];
  76. self::assertFalse($values->getScatterLines());
  77. self::assertSame(28575 / Properties::POINTS_WIDTH_MULTIPLIER, $values->getLineWidth());
  78. self::assertSame(3, $values->getPointSize());
  79. self::assertSame('', $values->getFillColor());
  80. $values = $plotValues[1];
  81. self::assertFalse($values->getScatterLines());
  82. self::assertSame(28575 / Properties::POINTS_WIDTH_MULTIPLIER, $values->getLineWidth());
  83. self::assertSame(3, $values->getPointSize());
  84. self::assertSame('', $values->getFillColor());
  85. $values = $plotValues[2];
  86. self::assertFalse($values->getScatterLines());
  87. self::assertSame(28575 / Properties::POINTS_WIDTH_MULTIPLIER, $values->getLineWidth());
  88. self::assertSame(7, $values->getPointSize());
  89. // Had been testing for Fill Color, but we actually
  90. // meant to test for marker color, which is now distinct.
  91. self::assertSame('FFFF00', $values->getMarkerFillColor()->getValue());
  92. self::assertSame('srgbClr', $values->getMarkerFillColor()->getType());
  93. $reloadedSpreadsheet->disconnectWorksheets();
  94. }
  95. public function testScatter6(): void
  96. {
  97. $file = self::DIRECTORY . '32readwriteScatterChart6.xlsx';
  98. $reader = new XlsxReader();
  99. $reader->setIncludeCharts(true);
  100. $spreadsheet = $reader->load($file);
  101. $sheet = $spreadsheet->getActiveSheet();
  102. self::assertSame(1, $sheet->getChartCount());
  103. /** @var callable */
  104. $callableReader = [$this, 'readCharts'];
  105. /** @var callable */
  106. $callableWriter = [$this, 'writeCharts'];
  107. $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx', $callableReader, $callableWriter);
  108. $spreadsheet->disconnectWorksheets();
  109. $sheet = $reloadedSpreadsheet->getActiveSheet();
  110. self::assertSame('Charts', $sheet->getTitle());
  111. $charts = $sheet->getChartCollection();
  112. self::assertCount(1, $charts);
  113. $chart = $charts[0];
  114. self::assertNotNull($chart);
  115. $title = $chart->getTitle();
  116. self::assertNotNull($title);
  117. $captionArray = $title->getCaption();
  118. self::assertIsArray($captionArray);
  119. self::assertCount(1, $captionArray);
  120. $caption = $captionArray[0];
  121. self::assertInstanceOf(RichText::class, $caption);
  122. self::assertSame('Scatter - Rich Text Title No Join and Markers', $caption->getPlainText());
  123. $elements = $caption->getRichTextElements();
  124. self::assertCount(3, $elements);
  125. $run = $elements[0];
  126. self::assertInstanceOf(Run::class, $run);
  127. $font = $run->getFont();
  128. self::assertInstanceOf(Font::class, $font);
  129. self::assertSame('Calibri', $font->getLatin());
  130. self::assertEquals(12, $font->getSize());
  131. self::assertTrue($font->getBold());
  132. self::assertFalse($font->getItalic());
  133. self::assertFalse($font->getSuperscript());
  134. self::assertFalse($font->getSubscript());
  135. self::assertFalse($font->getStrikethrough());
  136. self::assertSame('none', $font->getUnderline());
  137. $chartColor = $font->getChartColor();
  138. self::assertNotNull($chartColor);
  139. self::assertSame('000000', $chartColor->getValue());
  140. self::assertSame('srgbClr', $chartColor->getType());
  141. $run = $elements[1];
  142. self::assertInstanceOf(Run::class, $run);
  143. $font = $run->getFont();
  144. self::assertInstanceOf(Font::class, $font);
  145. self::assertSame('Courier New', $font->getLatin());
  146. self::assertEquals(10, $font->getSize());
  147. self::assertFalse($font->getBold());
  148. self::assertFalse($font->getItalic());
  149. self::assertFalse($font->getSuperscript());
  150. self::assertFalse($font->getSubscript());
  151. self::assertFalse($font->getStrikethrough());
  152. self::assertSame('single', $font->getUnderline());
  153. $chartColor = $font->getChartColor();
  154. self::assertNotNull($chartColor);
  155. self::assertSame('00B0F0', $chartColor->getValue());
  156. self::assertSame('srgbClr', $chartColor->getType());
  157. $run = $elements[2];
  158. self::assertInstanceOf(Run::class, $run);
  159. $font = $run->getFont();
  160. self::assertInstanceOf(Font::class, $font);
  161. self::assertSame('Calibri', $font->getLatin());
  162. self::assertEquals(12, $font->getSize());
  163. self::assertTrue($font->getBold());
  164. self::assertFalse($font->getItalic());
  165. self::assertFalse($font->getSuperscript());
  166. self::assertFalse($font->getSubscript());
  167. self::assertFalse($font->getStrikethrough());
  168. self::assertSame('none', $font->getUnderline());
  169. $chartColor = $font->getChartColor();
  170. self::assertNotNull($chartColor);
  171. self::assertSame('000000', $chartColor->getValue());
  172. self::assertSame('srgbClr', $chartColor->getType());
  173. $plotArea = $chart->getPlotArea();
  174. self::assertNotNull($plotArea);
  175. $plotSeries = $plotArea->getPlotGroup();
  176. self::assertCount(1, $plotSeries);
  177. $dataSeries = $plotSeries[0];
  178. $plotValues = $dataSeries->getPlotValues();
  179. self::assertCount(3, $plotValues);
  180. $values = $plotValues[0];
  181. self::assertFalse($values->getScatterLines());
  182. self::assertSame(28575 / Properties::POINTS_WIDTH_MULTIPLIER, $values->getLineWidth());
  183. self::assertSame(3, $values->getPointSize());
  184. self::assertSame('', $values->getFillColor());
  185. $values = $plotValues[1];
  186. self::assertFalse($values->getScatterLines());
  187. self::assertSame(28575 / Properties::POINTS_WIDTH_MULTIPLIER, $values->getLineWidth());
  188. self::assertSame(3, $values->getPointSize());
  189. self::assertSame('', $values->getFillColor());
  190. $values = $plotValues[2];
  191. self::assertFalse($values->getScatterLines());
  192. self::assertSame(28575 / Properties::POINTS_WIDTH_MULTIPLIER, $values->getLineWidth());
  193. self::assertSame(7, $values->getPointSize());
  194. // Had been testing for Fill Color, but we actually
  195. // meant to test for marker color, which is now distinct.
  196. self::assertSame('FFFF00', $values->getMarkerFillColor()->getValue());
  197. self::assertSame('srgbClr', $values->getMarkerFillColor()->getType());
  198. $reloadedSpreadsheet->disconnectWorksheets();
  199. }
  200. public function testScatter3(): void
  201. {
  202. $file = self::DIRECTORY . '32readwriteScatterChart3.xlsx';
  203. $reader = new XlsxReader();
  204. $reader->setIncludeCharts(true);
  205. $spreadsheet = $reader->load($file);
  206. $sheet = $spreadsheet->getActiveSheet();
  207. self::assertSame(1, $sheet->getChartCount());
  208. /** @var callable */
  209. $callableReader = [$this, 'readCharts'];
  210. /** @var callable */
  211. $callableWriter = [$this, 'writeCharts'];
  212. $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx', $callableReader, $callableWriter);
  213. $spreadsheet->disconnectWorksheets();
  214. $sheet = $reloadedSpreadsheet->getActiveSheet();
  215. self::assertSame('Charts', $sheet->getTitle());
  216. $charts = $sheet->getChartCollection();
  217. self::assertCount(1, $charts);
  218. $chart = $charts[0];
  219. self::assertNotNull($chart);
  220. $title = $chart->getTitle();
  221. self::assertNotNull($title);
  222. $captionArray = $title->getCaption();
  223. self::assertIsArray($captionArray);
  224. self::assertCount(1, $captionArray);
  225. $caption = $captionArray[0];
  226. self::assertInstanceOf(RichText::class, $caption);
  227. self::assertSame('Scatter - Join Straight Lines and Markers', $caption->getPlainText());
  228. $elements = $caption->getRichTextElements();
  229. self::assertCount(1, $elements);
  230. $run = $elements[0];
  231. self::assertInstanceOf(Run::class, $run);
  232. $font = $run->getFont();
  233. self::assertInstanceOf(Font::class, $font);
  234. self::assertSame('Calibri', $font->getLatin());
  235. self::assertEquals(12, $font->getSize());
  236. self::assertTrue($font->getBold());
  237. self::assertFalse($font->getItalic());
  238. self::assertFalse($font->getSuperscript());
  239. self::assertFalse($font->getSubscript());
  240. self::assertFalse($font->getStrikethrough());
  241. self::assertSame('none', $font->getUnderline());
  242. $chartColor = $font->getChartColor();
  243. self::assertNotNull($chartColor);
  244. self::assertSame('000000', $chartColor->getValue());
  245. self::assertSame('srgbClr', $chartColor->getType());
  246. $plotArea = $chart->getPlotArea();
  247. self::assertNotNull($plotArea);
  248. $plotSeries = $plotArea->getPlotGroup();
  249. self::assertCount(1, $plotSeries);
  250. $dataSeries = $plotSeries[0];
  251. $plotValues = $dataSeries->getPlotValues();
  252. self::assertCount(3, $plotValues);
  253. $values = $plotValues[0];
  254. self::assertTrue($values->getScatterLines());
  255. // the default value of 1 point is no longer written out
  256. // when not explicitly specified.
  257. self::assertNull($values->getLineWidth());
  258. self::assertSame(3, $values->getPointSize());
  259. self::assertSame('', $values->getFillColor());
  260. $values = $plotValues[1];
  261. self::assertTrue($values->getScatterLines());
  262. self::assertNull($values->getLineWidth());
  263. self::assertSame(3, $values->getPointSize());
  264. self::assertSame('', $values->getFillColor());
  265. $values = $plotValues[2];
  266. self::assertTrue($values->getScatterLines());
  267. self::assertNull($values->getLineWidth());
  268. self::assertSame(3, $values->getPointSize());
  269. self::assertSame('', $values->getFillColor());
  270. $reloadedSpreadsheet->disconnectWorksheets();
  271. }
  272. public function testScatter7(): void
  273. {
  274. $file = self::DIRECTORY . '32readwriteScatterChart7.xlsx';
  275. $reader = new XlsxReader();
  276. $reader->setIncludeCharts(true);
  277. $spreadsheet = $reader->load($file);
  278. $sheet = $spreadsheet->getActiveSheet();
  279. self::assertSame(1, $sheet->getChartCount());
  280. /** @var callable */
  281. $callableReader = [$this, 'readCharts'];
  282. /** @var callable */
  283. $callableWriter = [$this, 'writeCharts'];
  284. $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx', $callableReader, $callableWriter);
  285. $spreadsheet->disconnectWorksheets();
  286. $sheet = $reloadedSpreadsheet->getActiveSheet();
  287. self::assertSame('Charts', $sheet->getTitle());
  288. $charts = $sheet->getChartCollection();
  289. self::assertCount(1, $charts);
  290. $chart = $charts[0];
  291. self::assertNotNull($chart);
  292. $title = $chart->getTitle();
  293. self::assertNotNull($title);
  294. $captionArray = $title->getCaption();
  295. self::assertIsArray($captionArray);
  296. self::assertCount(1, $captionArray);
  297. $caption = $captionArray[0];
  298. self::assertInstanceOf(RichText::class, $caption);
  299. self::assertSame('Latin/EA/CS Title ABCאבגDEFァ', $caption->getPlainText());
  300. $elements = $caption->getRichTextElements();
  301. self::assertGreaterThan(0, count($elements));
  302. foreach ($elements as $run) {
  303. self::assertInstanceOf(Run::class, $run);
  304. $font = $run->getFont();
  305. self::assertInstanceOf(Font::class, $font);
  306. self::assertSame('Times New Roman', $font->getLatin());
  307. self::assertSame('Malgun Gothic', $font->getEastAsian());
  308. self::assertSame('Courier New', $font->getComplexScript());
  309. self::assertEquals(12, $font->getSize());
  310. self::assertTrue($font->getBold());
  311. self::assertFalse($font->getItalic());
  312. self::assertFalse($font->getSuperscript());
  313. self::assertFalse($font->getSubscript());
  314. self::assertFalse($font->getStrikethrough());
  315. self::assertSame('none', $font->getUnderline());
  316. $chartColor = $font->getChartColor();
  317. self::assertNotNull($chartColor);
  318. self::assertSame('000000', $chartColor->getValue());
  319. self::assertSame('srgbClr', $chartColor->getType());
  320. }
  321. $plotArea = $chart->getPlotArea();
  322. self::assertNotNull($plotArea);
  323. $plotSeries = $plotArea->getPlotGroup();
  324. self::assertCount(1, $plotSeries);
  325. $dataSeries = $plotSeries[0];
  326. $plotValues = $dataSeries->getPlotValues();
  327. self::assertCount(3, $plotValues);
  328. $values = $plotValues[0];
  329. self::assertFalse($values->getScatterLines());
  330. self::assertSame(28575 / Properties::POINTS_WIDTH_MULTIPLIER, $values->getLineWidth());
  331. self::assertSame(3, $values->getPointSize());
  332. self::assertSame('', $values->getFillColor());
  333. $values = $plotValues[1];
  334. self::assertFalse($values->getScatterLines());
  335. self::assertSame(28575 / Properties::POINTS_WIDTH_MULTIPLIER, $values->getLineWidth());
  336. self::assertSame(3, $values->getPointSize());
  337. self::assertSame('', $values->getFillColor());
  338. $values = $plotValues[2];
  339. self::assertFalse($values->getScatterLines());
  340. self::assertSame(28575 / Properties::POINTS_WIDTH_MULTIPLIER, $values->getLineWidth());
  341. self::assertSame(7, $values->getPointSize());
  342. // Had been testing for Fill Color, but we actually
  343. // meant to test for marker color, which is now distinct.
  344. self::assertSame('FFFF00', $values->getMarkerFillColor()->getValue());
  345. self::assertSame('srgbClr', $values->getMarkerFillColor()->getType());
  346. $reloadedSpreadsheet->disconnectWorksheets();
  347. }
  348. public function testScatter8(): void
  349. {
  350. $file = self::DIRECTORY . '32readwriteScatterChart8.xlsx';
  351. $reader = new XlsxReader();
  352. $reader->setIncludeCharts(true);
  353. $spreadsheet = $reader->load($file);
  354. $sheet = $spreadsheet->getActiveSheet();
  355. self::assertSame(1, $sheet->getChartCount());
  356. /** @var callable */
  357. $callableReader = [$this, 'readCharts'];
  358. /** @var callable */
  359. $callableWriter = [$this, 'writeCharts'];
  360. $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx', $callableReader, $callableWriter);
  361. $spreadsheet->disconnectWorksheets();
  362. $sheet = $reloadedSpreadsheet->getActiveSheet();
  363. self::assertSame('Worksheet', $sheet->getTitle());
  364. $charts = $sheet->getChartCollection();
  365. self::assertCount(1, $charts);
  366. $chart = $charts[0];
  367. self::assertNotNull($chart);
  368. $xAxis = $chart->getChartAxisX();
  369. self::assertEquals(45, $xAxis->getAxisOptionsProperty('textRotation'));
  370. $plotArea = $chart->getPlotArea();
  371. self::assertNotNull($plotArea);
  372. $plotSeries = $plotArea->getPlotGroup();
  373. self::assertCount(1, $plotSeries);
  374. $dataSeries = $plotSeries[0];
  375. $plotValues = $dataSeries->getPlotValues();
  376. self::assertCount(3, $plotValues);
  377. $values = $plotValues[0];
  378. self::assertSame(31750 / Properties::POINTS_WIDTH_MULTIPLIER, $values->getLineWidth());
  379. self::assertSame('sq', $values->getLineStyleProperty('cap'));
  380. self::assertSame('tri', $values->getLineStyleProperty('compound'));
  381. self::assertSame('sysDash', $values->getLineStyleProperty('dash'));
  382. self::assertSame('miter', $values->getLineStyleProperty('join'));
  383. self::assertSame('arrow', $values->getLineStyleProperty(['arrow', 'head', 'type']));
  384. self::assertSame('med', $values->getLineStyleProperty(['arrow', 'head', 'w']));
  385. self::assertSame('sm', $values->getLineStyleProperty(['arrow', 'head', 'len']));
  386. self::assertSame('triangle', $values->getLineStyleProperty(['arrow', 'end', 'type']));
  387. self::assertSame('med', $values->getLineStyleProperty(['arrow', 'end', 'w']));
  388. self::assertSame('lg', $values->getLineStyleProperty(['arrow', 'end', 'len']));
  389. self::assertSame('accent1', $values->getLineColorProperty('value'));
  390. self::assertSame('schemeClr', $values->getLineColorProperty('type'));
  391. self::assertSame(40, $values->getLineColorProperty('alpha'));
  392. self::assertSame('', $values->getFillColor());
  393. self::assertSame(7, $values->getPointSize());
  394. self::assertSame('diamond', $values->getPointMarker());
  395. self::assertSame('0070C0', $values->getMarkerFillColor()->getValue());
  396. self::assertSame('srgbClr', $values->getMarkerFillColor()->getType());
  397. self::assertSame('002060', $values->getMarkerBorderColor()->getValue());
  398. self::assertSame('srgbClr', $values->getMarkerBorderColor()->getType());
  399. $values = $plotValues[1];
  400. self::assertSame(7, $values->getPointSize());
  401. self::assertSame('square', $values->getPointMarker());
  402. self::assertSame('accent6', $values->getMarkerFillColor()->getValue());
  403. self::assertSame('schemeClr', $values->getMarkerFillColor()->getType());
  404. self::assertSame(3, $values->getMarkerFillColor()->getAlpha());
  405. self::assertSame('0FF000', $values->getMarkerBorderColor()->getValue());
  406. self::assertSame('srgbClr', $values->getMarkerBorderColor()->getType());
  407. self::assertNull($values->getMarkerBorderColor()->getAlpha());
  408. $values = $plotValues[2];
  409. self::assertSame(7, $values->getPointSize());
  410. self::assertSame('triangle', $values->getPointMarker());
  411. self::assertSame('FFFF00', $values->getMarkerFillColor()->getValue());
  412. self::assertSame('srgbClr', $values->getMarkerFillColor()->getType());
  413. self::assertNull($values->getMarkerFillColor()->getAlpha());
  414. self::assertSame('accent4', $values->getMarkerBorderColor()->getValue());
  415. self::assertSame('schemeClr', $values->getMarkerBorderColor()->getType());
  416. $reloadedSpreadsheet->disconnectWorksheets();
  417. }
  418. public function testScatter9(): void
  419. {
  420. // gradient testing
  421. $file = self::DIRECTORY . '32readwriteScatterChart9.xlsx';
  422. $reader = new XlsxReader();
  423. $reader->setIncludeCharts(true);
  424. $spreadsheet = $reader->load($file);
  425. $sheet = $spreadsheet->getActiveSheet();
  426. self::assertSame(1, $sheet->getChartCount());
  427. /** @var callable */
  428. $callableReader = [$this, 'readCharts'];
  429. /** @var callable */
  430. $callableWriter = [$this, 'writeCharts'];
  431. $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx', $callableReader, $callableWriter);
  432. $spreadsheet->disconnectWorksheets();
  433. $sheet = $reloadedSpreadsheet->getActiveSheet();
  434. self::assertSame('Worksheet', $sheet->getTitle());
  435. $charts = $sheet->getChartCollection();
  436. self::assertCount(1, $charts);
  437. $chart = $charts[0];
  438. self::assertNotNull($chart);
  439. self::assertFalse($chart->getNoFill());
  440. $plotArea = $chart->getPlotArea();
  441. self::assertNotNull($plotArea);
  442. self::assertFalse($plotArea->getNoFill());
  443. self::assertEquals(315.0, $plotArea->getGradientFillAngle());
  444. $stops = $plotArea->getGradientFillStops();
  445. self::assertCount(3, $stops);
  446. self::assertEquals(0.43808, $stops[0][0]);
  447. self::assertEquals(0, $stops[1][0]);
  448. self::assertEquals(0.91, $stops[2][0]);
  449. $color = $stops[0][1];
  450. self::assertInstanceOf(ChartColor::class, $color);
  451. self::assertSame('srgbClr', $color->getType());
  452. self::assertSame('CDDBEC', $color->getValue());
  453. self::assertNull($color->getAlpha());
  454. self::assertSame(20, $color->getBrightness());
  455. $color = $stops[1][1];
  456. self::assertInstanceOf(ChartColor::class, $color);
  457. self::assertSame('srgbClr', $color->getType());
  458. self::assertSame('FFC000', $color->getValue());
  459. self::assertNull($color->getAlpha());
  460. self::assertNull($color->getBrightness());
  461. $color = $stops[2][1];
  462. self::assertInstanceOf(ChartColor::class, $color);
  463. self::assertSame('srgbClr', $color->getType());
  464. self::assertSame('00B050', $color->getValue());
  465. self::assertNull($color->getAlpha());
  466. self::assertSame(4, $color->getBrightness());
  467. $reloadedSpreadsheet->disconnectWorksheets();
  468. }
  469. public function testScatter10(): void
  470. {
  471. // nofill for Chart and PlotArea, hidden Axis
  472. $file = self::DIRECTORY . '32readwriteScatterChart10.xlsx';
  473. $reader = new XlsxReader();
  474. $reader->setIncludeCharts(true);
  475. $spreadsheet = $reader->load($file);
  476. $sheet = $spreadsheet->getActiveSheet();
  477. self::assertSame(1, $sheet->getChartCount());
  478. /** @var callable */
  479. $callableReader = [$this, 'readCharts'];
  480. /** @var callable */
  481. $callableWriter = [$this, 'writeCharts'];
  482. $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx', $callableReader, $callableWriter);
  483. $spreadsheet->disconnectWorksheets();
  484. $sheet = $reloadedSpreadsheet->getActiveSheet();
  485. self::assertSame('Worksheet', $sheet->getTitle());
  486. $charts = $sheet->getChartCollection();
  487. self::assertCount(1, $charts);
  488. $chart = $charts[0];
  489. self::assertNotNull($chart);
  490. self::assertTrue($chart->getNoFill());
  491. $plotArea = $chart->getPlotArea();
  492. self::assertNotNull($plotArea);
  493. self::assertTrue($plotArea->getNoFill());
  494. $reloadedSpreadsheet->disconnectWorksheets();
  495. }
  496. }