XmlLoadTest.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Reader\Xml;
  3. use DateTimeZone;
  4. use PhpOffice\PhpSpreadsheet\Reader\Xml;
  5. use PhpOffice\PhpSpreadsheet\Settings;
  6. use PhpOffice\PhpSpreadsheet\Shared\Date;
  7. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  8. use PHPUnit\Framework\TestCase;
  9. class XmlLoadTest extends TestCase
  10. {
  11. /** @var ?Spreadsheet */
  12. private $spreadsheet;
  13. /** @var string */
  14. private $locale;
  15. protected function setUp(): void
  16. {
  17. $this->locale = Settings::getLocale();
  18. }
  19. protected function tearDown(): void
  20. {
  21. if ($this->spreadsheet !== null) {
  22. $this->spreadsheet->disconnectWorksheets();
  23. $this->spreadsheet = null;
  24. }
  25. Settings::setLocale($this->locale);
  26. }
  27. public function testLoadEnglish(): void
  28. {
  29. $this->xtestLoad();
  30. }
  31. public function testLoadFrench(): void
  32. {
  33. Settings::setLocale('fr');
  34. $this->xtestLoad();
  35. }
  36. public function xtestLoad(): void
  37. {
  38. $filename = __DIR__
  39. . '/../../../..'
  40. . '/samples/templates/excel2003.xml';
  41. $reader = new Xml();
  42. $this->spreadsheet = $spreadsheet = $reader->load($filename);
  43. self::assertEquals(2, $spreadsheet->getSheetCount());
  44. $sheet = $spreadsheet->getSheet(1);
  45. self::assertEquals('Report Data', $sheet->getTitle());
  46. self::assertEquals('BCD', $sheet->getCell('A4')->getValue());
  47. $props = $spreadsheet->getProperties();
  48. self::assertEquals('Mark Baker', $props->getCreator());
  49. $creationDate = $props->getCreated();
  50. $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\\TH:i:s\\Z', new DateTimeZone('UTC'));
  51. self::assertEquals('2010-09-02T20:48:39Z', $result);
  52. $creationDate = $props->getModified();
  53. $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\\TH:i:s\\Z', new DateTimeZone('UTC'));
  54. self::assertEquals('2010-09-03T21:48:39Z', $result);
  55. self::assertEquals('AbCd1234', $props->getCustomPropertyValue('my_API_Token'));
  56. self::assertEquals('2', $props->getCustomPropertyValue('myאInt'));
  57. $creationDate = $props->getCustomPropertyValue('my_API_Token_Expiry');
  58. $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\\TH:i:s\\Z', new DateTimeZone('UTC'));
  59. self::assertEquals('2019-01-31T07:00:00Z', $result);
  60. $sheet = $spreadsheet->getSheet(0);
  61. self::assertEquals('Sample Data', $sheet->getTitle());
  62. self::assertEquals('Test String 1', $sheet->getCell('A1')->getValue());
  63. self::assertEquals('Test with (") in string', $sheet->getCell('A4')->getValue());
  64. self::assertEquals(22269, $sheet->getCell('A10')->getValue());
  65. self::assertEquals('dd/mm/yyyy', $sheet->getCell('A10')->getStyle()->getNumberFormat()->getFormatCode());
  66. self::assertEquals('19/12/1960', $sheet->getCell('A10')->getFormattedValue());
  67. self::assertEquals(1.5, $sheet->getCell('A11')->getValue());
  68. self::assertEquals('# ?0/??0', $sheet->getCell('A11')->getStyle()->getNumberFormat()->getFormatCode());
  69. // Same pattern, same value, different display in Gnumeric vs Excel
  70. //self::assertEquals('1 1/2', $sheet->getCell('A11')->getFormattedValue());
  71. self::assertEquals('hh":"mm":"ss', $sheet->getCell('A13')->getStyle()->getNumberFormat()->getFormatCode());
  72. self::assertEquals('02:30:00', $sheet->getCell('A13')->getFormattedValue());
  73. self::assertEquals('d/m/yy hh":"mm', $sheet->getCell('A15')->getStyle()->getNumberFormat()->getFormatCode());
  74. self::assertEquals('19/12/60 01:30', $sheet->getCell('A15')->getFormattedValue());
  75. self::assertEquals('=B1+C1', $sheet->getCell('H1')->getValue());
  76. self::assertEquals('=E2&F2', $sheet->getCell('J2')->getValue());
  77. self::assertEquals('=SUM(C1:C4)', $sheet->getCell('I5')->getValue());
  78. // property not yet supported
  79. //self::assertFalse($sheet->getRowDimension(30)->getVisible());
  80. $hyperlink = $sheet->getCell('A21');
  81. self::assertEquals('PhpSpreadsheet', $hyperlink->getValue());
  82. self::assertEquals('https://github.com/PHPOffice/PhpSpreadsheet', $hyperlink->getHyperlink()->getUrl());
  83. }
  84. public function testLoadFilter(): void
  85. {
  86. $filename = __DIR__
  87. . '/../../../..'
  88. . '/samples/templates/excel2003.xml';
  89. $reader = new Xml();
  90. $filter = new XmlFilter();
  91. $reader->setReadFilter($filter);
  92. $this->spreadsheet = $spreadsheet = $reader->load($filename);
  93. self::assertEquals(2, $spreadsheet->getSheetCount());
  94. $sheet = $spreadsheet->getSheet(1);
  95. self::assertEquals('Report Data', $sheet->getTitle());
  96. self::assertEquals('', $sheet->getCell('A4')->getValue());
  97. $props = $spreadsheet->getProperties();
  98. self::assertEquals('Mark Baker', $props->getCreator());
  99. }
  100. public function testLoadSelectedSheets(): void
  101. {
  102. $filename = __DIR__
  103. . '/../../../..'
  104. . '/samples/templates/excel2003.xml';
  105. $reader = new Xml();
  106. $reader->setLoadSheetsOnly(['Unknown Sheet', 'Report Data']);
  107. $this->spreadsheet = $spreadsheet = $reader->load($filename);
  108. self::assertEquals(1, $spreadsheet->getSheetCount());
  109. $sheet = $spreadsheet->getSheet(0);
  110. self::assertEquals('Report Data', $sheet->getTitle());
  111. self::assertEquals('Third Heading', $sheet->getCell('C2')->getValue());
  112. }
  113. public function testLoadUnusableSample(): void
  114. {
  115. // Sample spreadsheet is not readable by Excel.
  116. // But PhpSpreadsheet can load it.
  117. $filename = __DIR__
  118. . '/../../../..'
  119. . '/samples/templates/excel2003.short.bad.xml';
  120. $reader = new Xml();
  121. $this->spreadsheet = $spreadsheet = $reader->load($filename);
  122. self::assertEquals(1, $spreadsheet->getSheetCount());
  123. $sheet = $spreadsheet->getSheet(0);
  124. self::assertEquals('Sample Data', $sheet->getTitle());
  125. }
  126. }