ChartsOpenpyxlTest.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Chart;
  3. use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
  4. use PHPUnit\Framework\TestCase;
  5. class ChartsOpenpyxlTest extends TestCase
  6. {
  7. private const DIRECTORY = 'samples' . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR;
  8. public function testBubble2(): void
  9. {
  10. $file = self::DIRECTORY . '32readwriteBubbleChart2.xlsx';
  11. $reader = new XlsxReader();
  12. $reader->setIncludeCharts(true);
  13. $spreadsheet = $reader->load($file);
  14. $sheet = $spreadsheet->getActiveSheet();
  15. self::assertSame(1, $sheet->getChartCount());
  16. self::assertSame('Sheet', $sheet->getTitle());
  17. $charts = $sheet->getChartCollection();
  18. self::assertCount(1, $charts);
  19. $chart = $charts[0];
  20. self::assertNotNull($chart);
  21. self::assertEmpty($chart->getTitle());
  22. self::assertTrue($chart->getOneCellAnchor());
  23. $plotArea = $chart->getPlotArea();
  24. self::assertNotNull($plotArea);
  25. $plotSeries = $plotArea->getPlotGroup();
  26. self::assertCount(1, $plotSeries);
  27. $dataSeries = $plotSeries[0];
  28. $labels = $dataSeries->getPlotLabels();
  29. self::assertCount(2, $labels);
  30. self::assertSame(['2013'], $labels[0]->getDataValues());
  31. self::assertSame(['2014'], $labels[1]->getDataValues());
  32. $plotCategories = $dataSeries->getPlotCategories();
  33. self::assertCount(2, $plotCategories);
  34. $categories = $plotCategories[0];
  35. self::assertSame('Number', $categories->getDataType());
  36. self::assertSame('\'Sheet\'!$A$2:$A$5', $categories->getDataSource());
  37. self::assertFalse($categories->getBubble3D());
  38. $categories = $plotCategories[1];
  39. self::assertCount(2, $plotCategories);
  40. self::assertSame('Number', $categories->getDataType());
  41. self::assertSame('\'Sheet\'!$A$7:$A$10', $categories->getDataSource());
  42. self::assertFalse($categories->getBubble3D());
  43. $plotValues = $dataSeries->getPlotValues();
  44. self::assertCount(2, $plotValues);
  45. $values = $plotValues[0];
  46. self::assertSame('Number', $values->getDataType());
  47. self::assertSame('\'Sheet\'!$B$2:$B$5', $values->getDataSource());
  48. self::assertFalse($values->getBubble3D());
  49. $values = $plotValues[1];
  50. self::assertCount(2, $plotValues);
  51. self::assertSame('Number', $values->getDataType());
  52. self::assertSame('\'Sheet\'!$B$7:$B$10', $values->getDataSource());
  53. self::assertFalse($values->getBubble3D());
  54. $plotValues = $dataSeries->getPlotBubbleSizes();
  55. self::assertCount(2, $plotValues);
  56. $values = $plotValues[0];
  57. self::assertSame('Number', $values->getDataType());
  58. self::assertSame('\'Sheet\'!$C$2:$C$5', $values->getDataSource());
  59. self::assertFalse($values->getBubble3D());
  60. $values = $plotValues[1];
  61. self::assertCount(2, $plotValues);
  62. self::assertSame('Number', $values->getDataType());
  63. self::assertSame('\'Sheet\'!$C$7:$C$10', $values->getDataSource());
  64. self::assertFalse($values->getBubble3D());
  65. $spreadsheet->disconnectWorksheets();
  66. }
  67. public function testXml(): void
  68. {
  69. $infile = self::DIRECTORY . '32readwriteBubbleChart2.xlsx';
  70. $file = 'zip://';
  71. $file .= $infile;
  72. $file .= '#xl/charts/chart1.xml';
  73. $data = file_get_contents($file);
  74. // confirm that file contains expected tags
  75. if ($data === false) {
  76. self::fail('Unable to read file');
  77. } else {
  78. self::assertSame(0, substr_count($data, 'c:'), 'unusual choice of prefix');
  79. self::assertSame(0, substr_count($data, 'bubbleScale'));
  80. self::assertSame(1, substr_count($data, '<tx><v>2013</v></tx>'), 'v tag for 2013');
  81. self::assertSame(1, substr_count($data, '<tx><v>2014</v></tx>'), 'v tag for 2014');
  82. self::assertSame(0, substr_count($data, 'numCache'), 'no cached values');
  83. }
  84. $file = 'zip://';
  85. $file .= $infile;
  86. $file .= '#xl/drawings/_rels/drawing1.xml.rels';
  87. $data = file_get_contents($file);
  88. // confirm that file contains expected tags
  89. if ($data === false) {
  90. self::fail('Unable to read file');
  91. } else {
  92. self::assertSame(1, substr_count($data, 'Target="/xl/charts/chart1.xml"'), 'Unusual absolute address in drawing rels file');
  93. }
  94. $file = 'zip://';
  95. $file .= $infile;
  96. $file .= '#xl/worksheets/_rels/sheet1.xml.rels';
  97. $data = file_get_contents($file);
  98. // confirm that file contains expected tags
  99. if ($data === false) {
  100. self::fail('Unable to read file');
  101. } else {
  102. self::assertSame(1, substr_count($data, 'Target="/xl/drawings/drawing1.xml"'), 'Unusual absolute address in worksheet rels file');
  103. }
  104. }
  105. }