RepeatedRowsTest.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Writer\Html;
  3. use DOMDocument;
  4. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  5. use PhpOffice\PhpSpreadsheet\Writer\Html;
  6. use PhpOffice\PhpSpreadsheetTests\Functional;
  7. class RepeatedRowsTest extends Functional\AbstractFunctional
  8. {
  9. public function testWriteRepeats(): void
  10. {
  11. $spreadsheet = new Spreadsheet();
  12. $sheet = $spreadsheet->getActiveSheet();
  13. $sheet->getPageSetup()->setRowsToRepeatAtTop([1, 2]);
  14. $sheet->setCellValue('A1', 'Repeat1');
  15. $sheet->setCellValue('A2', 'Repeat2');
  16. for ($row = 3; $row <= 100; ++$row) {
  17. $sheet->setCellValue("A$row", $row);
  18. }
  19. $writer = new Html($spreadsheet);
  20. $html = $writer->generateHTMLall();
  21. $dom = new DOMDocument();
  22. $dom->loadHTML($html);
  23. $body = $dom->getElementsByTagName('body')[0];
  24. $divs = $body->getElementsByTagName('div');
  25. $tbl = $divs->item(0)->getElementsByTagName('table');
  26. self::assertEquals('', $tbl->item(0)->getAttribute('style'));
  27. $thd = $divs->item(0)->getElementsByTagName('thead');
  28. self::assertCount(1, $thd);
  29. $trw = $thd->item(0)->getElementsByTagName('tr');
  30. self::assertCount(2, $trw);
  31. $tbd = $divs->item(0)->getElementsByTagName('tbody');
  32. self::assertCount(1, $tbd);
  33. $trw = $tbd->item(0)->getElementsByTagName('tr');
  34. self::assertCount(98, $trw);
  35. $this->writeAndReload($spreadsheet, 'Html');
  36. }
  37. public function testWriteNoRepeats(): void
  38. {
  39. $spreadsheet = new Spreadsheet();
  40. $sheet = $spreadsheet->getActiveSheet();
  41. //$sheet->getPageSetup()->setRowsToRepeatAtTop([1, 2]);
  42. $sheet->setCellValue('A1', 'Repeat1');
  43. $sheet->setCellValue('A2', 'Repeat2');
  44. for ($row = 3; $row <= 100; ++$row) {
  45. $sheet->setCellValue("A$row", $row);
  46. }
  47. $writer = new Html($spreadsheet);
  48. $html = $writer->generateHTMLall();
  49. $dom = new DOMDocument();
  50. $dom->loadHTML($html);
  51. $body = $dom->getElementsByTagName('body')[0];
  52. $divs = $body->getElementsByTagName('div');
  53. $tbl = $divs->item(0)->getElementsByTagName('table');
  54. $thd = $tbl->item(0)->getElementsByTagName('thead');
  55. self::assertCount(0, $thd);
  56. //$trw = $thd->item(0)->getElementsByTagName('tr');
  57. //self::assertCount(2, $trw);
  58. $tbd = $divs->item(0)->getElementsByTagName('tbody');
  59. self::assertCount(1, $tbd);
  60. $trw = $tbd->item(0)->getElementsByTagName('tr');
  61. self::assertCount(100, $trw);
  62. $this->writeAndReload($spreadsheet, 'Html');
  63. }
  64. public function testWriteRepeatsInline(): void
  65. {
  66. $spreadsheet = new Spreadsheet();
  67. $sheet = $spreadsheet->getActiveSheet();
  68. $sheet->getPageSetup()->setRowsToRepeatAtTop([1, 2]);
  69. $sheet->setCellValue('A1', 'Repeat1');
  70. $sheet->setCellValue('A2', 'Repeat2');
  71. for ($row = 3; $row <= 100; ++$row) {
  72. $sheet->setCellValue("A$row", $row);
  73. }
  74. $writer = new Html($spreadsheet);
  75. self::assertFalse($writer->getUseInlineCss());
  76. $writer->setUseInlineCss(true);
  77. $html = $writer->generateHTMLall();
  78. $dom = new DOMDocument();
  79. $dom->loadHTML($html);
  80. $body = $dom->getElementsByTagName('body')[0];
  81. $divs = $body->getElementsByTagName('div');
  82. $tbl = $divs->item(0)->getElementsByTagName('table');
  83. self::assertEquals('border-collapse:collapse', $tbl->item(0)->getAttribute('style'));
  84. $thd = $divs->item(0)->getElementsByTagName('thead');
  85. self::assertCount(1, $thd);
  86. $trw = $thd->item(0)->getElementsByTagName('tr');
  87. self::assertCount(2, $trw);
  88. $tbd = $divs->item(0)->getElementsByTagName('tbody');
  89. self::assertCount(1, $tbd);
  90. $trw = $tbd->item(0)->getElementsByTagName('tr');
  91. self::assertCount(98, $trw);
  92. $this->writeAndReload($spreadsheet, 'Html');
  93. }
  94. }