XlsTest.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Reader\Xls;
  3. use PhpOffice\PhpSpreadsheet\Cell\Cell;
  4. use PhpOffice\PhpSpreadsheet\Reader\Xls;
  5. use PhpOffice\PhpSpreadsheet\Shared\CodePage;
  6. use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
  7. class XlsTest extends AbstractFunctional
  8. {
  9. /**
  10. * Test load Xls file.
  11. */
  12. public function testLoadXlsSample(): void
  13. {
  14. $filename = 'tests/data/Reader/XLS/sample.xls';
  15. $reader = new Xls();
  16. $spreadsheet = $reader->load($filename);
  17. self::assertEquals('Title', $spreadsheet->getSheet(0)->getCell('A1')->getValue());
  18. $spreadsheet->disconnectWorksheets();
  19. }
  20. /**
  21. * Test load Xls file with invalid xfIndex.
  22. */
  23. public function testLoadXlsBug1505(): void
  24. {
  25. $filename = 'tests/data/Reader/XLS/bug1505.xls';
  26. $reader = new Xls();
  27. $spreadsheet = $reader->load($filename);
  28. $sheet = $spreadsheet->getActiveSheet();
  29. $col = $sheet->getHighestColumn();
  30. $row = $sheet->getHighestRow();
  31. $newspreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
  32. $newsheet = $newspreadsheet->getActiveSheet();
  33. $newcol = $newsheet->getHighestColumn();
  34. $newrow = $newsheet->getHighestRow();
  35. self::assertEquals($spreadsheet->getSheetCount(), $newspreadsheet->getSheetCount());
  36. self::assertEquals($sheet->getTitle(), $newsheet->getTitle());
  37. self::assertEquals($sheet->getColumnDimensions(), $newsheet->getColumnDimensions());
  38. self::assertEquals($col, $newcol);
  39. self::assertEquals($row, $newrow);
  40. self::assertEquals($sheet->getCell('A1')->getFormattedValue(), $newsheet->getCell('A1')->getFormattedValue());
  41. self::assertEquals($sheet->getCell("$col$row")->getFormattedValue(), $newsheet->getCell("$col$row")->getFormattedValue());
  42. $spreadsheet->disconnectWorksheets();
  43. $newspreadsheet->disconnectWorksheets();
  44. }
  45. /**
  46. * Test load Xls file with invalid length in SST map.
  47. */
  48. public function testLoadXlsBug1592(): void
  49. {
  50. $filename = 'tests/data/Reader/XLS/bug1592.xls';
  51. $reader = new Xls();
  52. // When no fix applied, spreadsheet is not loaded
  53. $spreadsheet = $reader->load($filename);
  54. $sheet = $spreadsheet->getActiveSheet();
  55. $col = $sheet->getHighestColumn();
  56. $row = $sheet->getHighestRow();
  57. $newspreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
  58. $newsheet = $newspreadsheet->getActiveSheet();
  59. $newcol = $newsheet->getHighestColumn();
  60. $newrow = $newsheet->getHighestRow();
  61. self::assertEquals($spreadsheet->getSheetCount(), $newspreadsheet->getSheetCount());
  62. self::assertEquals($sheet->getTitle(), $newsheet->getTitle());
  63. self::assertEquals($sheet->getColumnDimensions(), $newsheet->getColumnDimensions());
  64. self::assertEquals($col, $newcol);
  65. self::assertEquals($row, $newrow);
  66. $rowIterator = $sheet->getRowIterator();
  67. foreach ($rowIterator as $row) {
  68. foreach ($row->getCellIterator() as $cellx) {
  69. /** @var Cell */
  70. $cell = $cellx;
  71. $valOld = $cell->getFormattedValue();
  72. $valNew = $newsheet->getCell($cell->getCoordinate())->getFormattedValue();
  73. self::assertEquals($valOld, $valNew);
  74. }
  75. }
  76. $spreadsheet->disconnectWorksheets();
  77. $newspreadsheet->disconnectWorksheets();
  78. }
  79. /**
  80. * Test load Xls file with MACCENTRALEUROPE encoding, which is implemented
  81. * as MAC-CENTRALEUROPE on some systems. Issue #549.
  82. */
  83. public function testLoadMacCentralEurope(): void
  84. {
  85. $codePages = CodePage::getEncodings();
  86. self::assertIsArray($codePages[10029]);
  87. $filename = 'tests/data/Reader/XLS/maccentraleurope.xls';
  88. $reader = new Xls();
  89. // When no fix applied, spreadsheet fails to load on some systems
  90. $spreadsheet = $reader->load($filename);
  91. $sheet = $spreadsheet->getActiveSheet();
  92. self::assertSame('Ładowność', $sheet->getCell('I1')->getValue());
  93. $spreadsheet->disconnectWorksheets();
  94. }
  95. /**
  96. * First test changes array entry in CodePage.
  97. * This test confirms new that new entry is okay.
  98. */
  99. public function testLoadMacCentralEurope2(): void
  100. {
  101. $codePages = CodePage::getEncodings();
  102. self::assertIsString($codePages[10029]);
  103. $filename = 'tests/data/Reader/XLS/maccentraleurope.xls';
  104. $reader = new Xls();
  105. // When no fix applied, spreadsheet fails to load on some systems
  106. $spreadsheet = $reader->load($filename);
  107. $sheet = $spreadsheet->getActiveSheet();
  108. self::assertSame('Ładowność', $sheet->getCell('I1')->getValue());
  109. $spreadsheet->disconnectWorksheets();
  110. }
  111. public function testLoadXlsBug1114(): void
  112. {
  113. $filename = 'tests/data/Reader/XLS/bug1114.xls';
  114. $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($filename);
  115. $sheet = $spreadsheet->getActiveSheet();
  116. self::assertSame(1148140800.0, $sheet->getCell('B2')->getValue());
  117. $spreadsheet->disconnectWorksheets();
  118. }
  119. }