SlkTest.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Reader\Slk;
  3. use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;
  4. use PhpOffice\PhpSpreadsheet\Reader\Slk;
  5. use PhpOffice\PhpSpreadsheet\Shared\File;
  6. use PhpOffice\PhpSpreadsheet\Style\Border;
  7. use PhpOffice\PhpSpreadsheet\Style\Fill;
  8. use PhpOffice\PhpSpreadsheet\Style\Font;
  9. class SlkTest extends \PHPUnit\Framework\TestCase
  10. {
  11. /**
  12. * @var string
  13. */
  14. private static $testbook = __DIR__ . '/../../../../samples/templates/SylkTest.slk';
  15. /**
  16. * @var string
  17. */
  18. private $filename = '';
  19. protected function teardown(): void
  20. {
  21. if ($this->filename !== '') {
  22. unlink($this->filename);
  23. $this->filename = '';
  24. }
  25. }
  26. public function testInfo(): void
  27. {
  28. $reader = new Slk();
  29. $workSheetInfo = $reader->listWorkSheetInfo(self::$testbook);
  30. $info0 = $workSheetInfo[0];
  31. self::assertEquals('SylkTest', $info0['worksheetName']);
  32. self::assertEquals('J', $info0['lastColumnLetter']);
  33. self::assertEquals(9, $info0['lastColumnIndex']);
  34. self::assertEquals(18, $info0['totalRows']);
  35. self::assertEquals(10, $info0['totalColumns']);
  36. }
  37. public function testBadFileName(): void
  38. {
  39. $this->expectException(ReaderException::class);
  40. $reader = new Slk();
  41. self::assertNull($reader->setLoadSheetsOnly(null)->getLoadSheetsOnly());
  42. $reader->listWorkSheetInfo(self::$testbook . 'xxx');
  43. }
  44. public function testBadFileName2(): void
  45. {
  46. $reader = new Slk();
  47. self::assertFalse($reader->canRead(self::$testbook . 'xxx'));
  48. }
  49. public function testNotSylkFile(): void
  50. {
  51. $this->expectException(ReaderException::class);
  52. $reader = new Slk();
  53. $reader->listWorkSheetInfo(__FILE__);
  54. }
  55. public function testLoadSlk(): void
  56. {
  57. $reader = new Slk();
  58. $spreadsheet = $reader->load(self::$testbook);
  59. $sheet = $spreadsheet->getActiveSheet();
  60. self::assertEquals('SylkTest', $sheet->getTitle());
  61. self::assertEquals('FFFF0000', $sheet->getCell('A1')->getStyle()->getFont()->getColor()->getARGB());
  62. self::assertEquals(Fill::FILL_PATTERN_GRAY125, $sheet->getCell('A2')->getStyle()->getFill()->getFillType());
  63. self::assertEquals(Font::UNDERLINE_SINGLE, $sheet->getCell('A4')->getStyle()->getFont()->getUnderline());
  64. self::assertEquals('Test with (;) in string', $sheet->getCell('A4')->getValue());
  65. self::assertEquals(22269, $sheet->getCell('A10')->getValue());
  66. self::assertEquals('dd/mm/yyyy', $sheet->getCell('A10')->getStyle()->getNumberFormat()->getFormatCode());
  67. self::assertEquals('19/12/1960', $sheet->getCell('A10')->getFormattedValue());
  68. self::assertEquals(1.5, $sheet->getCell('A11')->getValue());
  69. self::assertEquals('# ?/?', $sheet->getCell('A11')->getStyle()->getNumberFormat()->getFormatCode());
  70. self::assertEquals('1 1/2', $sheet->getCell('A11')->getFormattedValue());
  71. self::assertEquals('=B1+C1', $sheet->getCell('H1')->getValue());
  72. self::assertEquals('=E2&F2', $sheet->getCell('J2')->getValue());
  73. self::assertEquals('=SUM(C1:C4)', $sheet->getCell('I5')->getValue());
  74. self::assertEquals('=MEDIAN(B6:B8)', $sheet->getCell('B9')->getValue());
  75. self::assertEquals(11, $sheet->getCell('E1')->getStyle()->getFont()->getSize());
  76. self::assertTrue($sheet->getCell('E1')->getStyle()->getFont()->getBold());
  77. self::assertTrue($sheet->getCell('E1')->getStyle()->getFont()->getItalic());
  78. self::assertEquals(Font::UNDERLINE_SINGLE, $sheet->getCell('E1')->getStyle()->getFont()->getUnderline());
  79. self::assertFalse($sheet->getCell('E2')->getStyle()->getFont()->getBold());
  80. self::assertFalse($sheet->getCell('E2')->getStyle()->getFont()->getItalic());
  81. self::assertEquals(Font::UNDERLINE_NONE, $sheet->getCell('E2')->getStyle()->getFont()->getUnderline());
  82. self::assertTrue($sheet->getCell('E3')->getStyle()->getFont()->getBold());
  83. self::assertFalse($sheet->getCell('E3')->getStyle()->getFont()->getItalic());
  84. self::assertEquals(Font::UNDERLINE_NONE, $sheet->getCell('E3')->getStyle()->getFont()->getUnderline());
  85. self::assertFalse($sheet->getCell('E4')->getStyle()->getFont()->getBold());
  86. self::assertTrue($sheet->getCell('E4')->getStyle()->getFont()->getItalic());
  87. self::assertEquals(Font::UNDERLINE_NONE, $sheet->getCell('E4')->getStyle()->getFont()->getUnderline());
  88. self::assertTrue($sheet->getCell('F1')->getStyle()->getFont()->getBold());
  89. self::assertFalse($sheet->getCell('F1')->getStyle()->getFont()->getItalic());
  90. self::assertEquals(Font::UNDERLINE_SINGLE, $sheet->getCell('F1')->getStyle()->getFont()->getUnderline());
  91. self::assertFalse($sheet->getCell('F2')->getStyle()->getFont()->getBold());
  92. self::assertFalse($sheet->getCell('F2')->getStyle()->getFont()->getItalic());
  93. self::assertEquals(Font::UNDERLINE_NONE, $sheet->getCell('F2')->getStyle()->getFont()->getUnderline());
  94. self::assertTrue($sheet->getCell('F3')->getStyle()->getFont()->getBold());
  95. self::assertTrue($sheet->getCell('F3')->getStyle()->getFont()->getItalic());
  96. self::assertEquals(Font::UNDERLINE_NONE, $sheet->getCell('F3')->getStyle()->getFont()->getUnderline());
  97. self::assertFalse($sheet->getCell('F4')->getStyle()->getFont()->getBold());
  98. self::assertFalse($sheet->getCell('F4')->getStyle()->getFont()->getItalic());
  99. self::assertEquals(Font::UNDERLINE_NONE, $sheet->getCell('F4')->getStyle()->getFont()->getUnderline());
  100. self::assertEquals(Border::BORDER_THIN, $sheet->getCell('C10')->getStyle()->getBorders()->getTop()->getBorderStyle());
  101. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C10')->getStyle()->getBorders()->getRight()->getBorderStyle());
  102. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C10')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  103. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C10')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  104. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C12')->getStyle()->getBorders()->getTop()->getBorderStyle());
  105. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C12')->getStyle()->getBorders()->getRight()->getBorderStyle());
  106. self::assertEquals(Border::BORDER_THIN, $sheet->getCell('C12')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  107. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C12')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  108. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C14')->getStyle()->getBorders()->getTop()->getBorderStyle());
  109. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C14')->getStyle()->getBorders()->getRight()->getBorderStyle());
  110. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C14')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  111. self::assertEquals(Border::BORDER_THIN, $sheet->getCell('C14')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  112. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C16')->getStyle()->getBorders()->getTop()->getBorderStyle());
  113. self::assertEquals(Border::BORDER_THIN, $sheet->getCell('C16')->getStyle()->getBorders()->getRight()->getBorderStyle());
  114. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C16')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  115. self::assertEquals(Border::BORDER_NONE, $sheet->getCell('C16')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  116. self::assertEquals(Border::BORDER_THIN, $sheet->getCell('C18')->getStyle()->getBorders()->getTop()->getBorderStyle());
  117. self::assertEquals(Border::BORDER_THIN, $sheet->getCell('C18')->getStyle()->getBorders()->getRight()->getBorderStyle());
  118. self::assertEquals(Border::BORDER_THIN, $sheet->getCell('C18')->getStyle()->getBorders()->getBottom()->getBorderStyle());
  119. self::assertEquals(Border::BORDER_THIN, $sheet->getCell('C18')->getStyle()->getBorders()->getLeft()->getBorderStyle());
  120. // Have not yet figured out how C6/C7 are centred
  121. $spreadsheet->disconnectWorksheets();
  122. }
  123. public function testSheetIndex(): void
  124. {
  125. $reader = new Slk();
  126. $sheetIndex = 2;
  127. $reader->setSheetIndex($sheetIndex);
  128. self::assertEquals($sheetIndex, $reader->getSheetIndex());
  129. $spreadsheet = $reader->load(self::$testbook);
  130. $sheet = $spreadsheet->setActiveSheetIndex($sheetIndex);
  131. self::assertEquals('SylkTest', $sheet->getTitle());
  132. self::assertEquals('FFFF0000', $sheet->getCell('A1')->getStyle()->getFont()->getColor()->getARGB());
  133. $spreadsheet->disconnectWorksheets();
  134. }
  135. public function testLongName(): void
  136. {
  137. $contents = file_get_contents(self::$testbook);
  138. $this->filename = File::sysGetTempDir()
  139. . '/123456789a123456789b123456789c12345.slk';
  140. file_put_contents($this->filename, $contents);
  141. $reader = new Slk();
  142. $spreadsheet = $reader->load($this->filename);
  143. $sheet = $spreadsheet->getActiveSheet();
  144. self::assertEquals('123456789a123456789b123456789c1', $sheet->getTitle());
  145. self::assertEquals('FFFF0000', $sheet->getCell('A1')->getStyle()->getFont()->getColor()->getARGB());
  146. $spreadsheet->disconnectWorksheets();
  147. }
  148. }