GridlinesTest.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Writer\Html;
  3. use DOMDocument;
  4. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  5. use PhpOffice\PhpSpreadsheet\Style\Color;
  6. use PhpOffice\PhpSpreadsheet\Writer\Html;
  7. use PhpOffice\PhpSpreadsheetTests\Functional;
  8. class GridlinesTest extends Functional\AbstractFunctional
  9. {
  10. public function testGridlines(): void
  11. {
  12. $spreadsheet = new Spreadsheet();
  13. $sheet = $spreadsheet->getActiveSheet();
  14. $sheet->setShowGridlines(true)->setPrintGridlines(true);
  15. $sheet->setCellValue('A1', 1);
  16. $sheet = $spreadsheet->createSheet();
  17. $sheet->setShowGridlines(true)->setPrintGridlines(false);
  18. $sheet->setCellValue('A1', 1);
  19. $sheet = $spreadsheet->createSheet();
  20. $sheet->setShowGridlines(false)->setPrintGridlines(true);
  21. $sheet->setCellValue('A1', 1);
  22. $sheet = $spreadsheet->createSheet();
  23. $sheet->setShowGridlines(false)->setPrintGridlines(false);
  24. $sheet->setCellValue('A1', 1);
  25. $writer = new Html($spreadsheet);
  26. $writer->writeAllSheets();
  27. $html = $writer->generateHTMLAll();
  28. $dom = new DOMDocument();
  29. $dom->loadHTML($html);
  30. $body = $dom->getElementsByTagName('body')[0];
  31. $divs = $body->getElementsByTagName('div');
  32. self::assertCount(4, $divs);
  33. $tbl = $divs[0]->getElementsByTagName('table')[0];
  34. $cls = $tbl->getAttribute('class');
  35. self::assertEquals('sheet0 gridlines gridlinesp', $cls);
  36. $tbl = $divs[1]->getElementsByTagName('table')[0];
  37. $cls = $tbl->getAttribute('class');
  38. self::assertEquals('sheet1 gridlines', $cls);
  39. $tbl = $divs[2]->getElementsByTagName('table')[0];
  40. $cls = $tbl->getAttribute('class');
  41. self::assertEquals('sheet2 gridlinesp', $cls);
  42. $tbl = $divs[3]->getElementsByTagName('table')[0];
  43. $cls = $tbl->getAttribute('class');
  44. self::assertEquals('sheet3', $cls);
  45. $this->writeAndReload($spreadsheet, 'Html');
  46. }
  47. public function testGridlinesInline(): void
  48. {
  49. $spreadsheet = new Spreadsheet();
  50. $sheet = $spreadsheet->getActiveSheet();
  51. $sheet->setShowGridlines(true)->setPrintGridlines(true);
  52. $sheet->setCellValue('A1', 1);
  53. $sheet = $spreadsheet->createSheet();
  54. $sheet->setShowGridlines(true)->setPrintGridlines(false);
  55. $sheet->setCellValue('A1', 1);
  56. $sheet = $spreadsheet->createSheet();
  57. $sheet->setShowGridlines(false)->setPrintGridlines(true);
  58. $sheet->setCellValue('A1', 1);
  59. $sheet = $spreadsheet->createSheet();
  60. $sheet->setShowGridlines(false)->setPrintGridlines(false);
  61. $sheet->setCellValue('A1', 1);
  62. $writer = new Html($spreadsheet);
  63. $writer->writeAllSheets();
  64. $writer->setUseInlineCss(true);
  65. $html = $writer->generateHTMLAll();
  66. $dom = new DOMDocument();
  67. $dom->loadHTML($html);
  68. $body = $dom->getElementsByTagName('body')[0];
  69. $divs = $body->getElementsByTagName('div');
  70. self::assertCount(4, $divs);
  71. $tbl = $divs[0]->getElementsByTagName('table')[0];
  72. $cls = $tbl->getAttribute('class');
  73. self::assertEquals('gridlines gridlinesp', $cls);
  74. $tbl = $divs[1]->getElementsByTagName('table')[0];
  75. $cls = $tbl->getAttribute('class');
  76. self::assertEquals('gridlines', $cls);
  77. $tbl = $divs[2]->getElementsByTagName('table')[0];
  78. $cls = $tbl->getAttribute('class');
  79. self::assertEquals('gridlinesp', $cls);
  80. $tbl = $divs[3]->getElementsByTagName('table')[0];
  81. $cls = $tbl->getAttribute('class');
  82. self::assertEquals('', $cls);
  83. $this->writeAndReload($spreadsheet, 'Html');
  84. }
  85. public function testRichText(): void
  86. {
  87. $spreadsheet = new Spreadsheet();
  88. $sheet = $spreadsheet->getActiveSheet();
  89. $emc2 = new \PhpOffice\PhpSpreadsheet\RichText\RichText();
  90. $part1 = $emc2->createTextRun('e=mc');
  91. $font = $part1->getFont();
  92. self::assertNotNull($font);
  93. $font->getColor()->setARGB(Color::COLOR_BLUE);
  94. $part2 = $emc2->createTextRun('2');
  95. $font = $part2->getFont();
  96. self::assertNotNull($font);
  97. $font->getColor()->setARGB(Color::COLOR_DARKGREEN);
  98. $font->setSuperScript(true);
  99. $sheet->setCellValue('A1', $emc2);
  100. $h2o = new \PhpOffice\PhpSpreadsheet\RichText\RichText();
  101. $h2o->createTextRun('H');
  102. $part2 = $h2o->createTextRun('2');
  103. $font = $part2->getFont();
  104. self::assertNotNull($font);
  105. $font->setSubScript(true);
  106. $font->getColor()->setARGB(Color::COLOR_RED);
  107. $h2o->createTextRun('O');
  108. $sheet->setCellValue('A2', $h2o);
  109. $h2so4 = new \PhpOffice\PhpSpreadsheet\RichText\RichText();
  110. $h2so4->createTextRun('H');
  111. $part2 = $h2so4->createTextRun('2');
  112. $font = $part2->getFont();
  113. self::assertNotNull($font);
  114. $font->setSubScript(true);
  115. $h2so4->createTextRun('SO');
  116. $part4 = $h2so4->createTextRun('4');
  117. $font = $part4->getFont();
  118. self::assertNotNull($font);
  119. $font->setSubScript(true);
  120. $sheet->setCellValue('A3', $h2so4);
  121. $sheet->setCellValue('A4', '5');
  122. $sheet->getCell('A4')->getStyle()->getFont()->setSuperScript(true);
  123. $sheet->setCellValue('A5', '6');
  124. $sheet->getCell('A5')->getStyle()->getFont()->setSubScript(true);
  125. $writer = new Html($spreadsheet);
  126. $html = $writer->generateHTMLAll();
  127. $dom = new DOMDocument();
  128. $dom->loadHTML($html);
  129. $body = $dom->getElementsByTagName('body')[0];
  130. $divs = $body->getElementsByTagName('div');
  131. self::assertCount(1, $divs);
  132. $tabl = $divs[0]->getElementsByTagName('table');
  133. $tbod = $tabl[0]->getElementsByTagName('tbody');
  134. $rows = $tbod[0]->getElementsByTagName('tr');
  135. self::assertCount(5, $rows);
  136. $tds = $rows[0]->getElementsByTagName('td');
  137. self::assertCount(1, $tds);
  138. $spans = $tds[0]->getElementsByTagName('span');
  139. self::assertCount(2, $spans);
  140. self::assertEquals('e=mc', $spans[0]->textContent);
  141. $style = $spans[0]->getAttribute('style');
  142. self::assertEquals(1, preg_match('/color:#0000FF/', $style));
  143. $style = $spans[1]->getAttribute('style');
  144. self::assertEquals(1, preg_match('/color:#008000/', $style));
  145. $sups = $spans[1]->getElementsByTagName('sup');
  146. self::assertCount(1, $sups);
  147. assert('2' == $sups[0]->textContent);
  148. $tds = $rows[1]->getElementsByTagName('td');
  149. assert(1 == count($tds));
  150. $spans = $tds[0]->getElementsByTagName('span');
  151. assert(3 == count($spans));
  152. assert('H' == $spans[0]->textContent);
  153. $style = $spans[1]->getAttribute('style');
  154. assert(1 == preg_match('/color:#FF0000/', $style));
  155. $subs = $spans[1]->getElementsByTagName('sub');
  156. assert(1 == count($subs));
  157. assert('2' == $subs[0]->textContent);
  158. assert('O' == $spans[2]->textContent);
  159. $tds = $rows[2]->getElementsByTagName('td');
  160. self::assertCount(1, $tds);
  161. $spans = $tds[0]->getElementsByTagName('span');
  162. self::assertCount(4, $spans);
  163. self::assertEquals('H', $spans[0]->textContent);
  164. $subs = $spans[1]->getElementsByTagName('sub');
  165. self::assertCount(1, $subs);
  166. self::assertEquals('2', $subs[0]->textContent);
  167. self::assertEquals('SO', $spans[2]->textContent);
  168. $subs = $spans[3]->getElementsByTagName('sub');
  169. self::assertCount(1, $subs);
  170. self::assertEquals('4', $subs[0]->textContent);
  171. $tds = $rows[3]->getElementsByTagName('td');
  172. self::assertCount(1, $tds);
  173. $spans = $tds[0]->getElementsByTagName('span');
  174. self::assertCount(0, $spans);
  175. $sups = $tds[0]->getElementsByTagName('sup');
  176. self::assertCount(1, $sups);
  177. self::assertEquals('5', $sups[0]->textContent);
  178. $tds = $rows[4]->getElementsByTagName('td');
  179. self::assertCount(1, $tds);
  180. $spans = $tds[0]->getElementsByTagName('span');
  181. self::assertCount(0, $spans);
  182. $subs = $tds[0]->getElementsByTagName('sub');
  183. self::assertCount(1, $subs);
  184. self::assertEquals('6', $subs[0]->textContent);
  185. $this->writeAndReload($spreadsheet, 'Html');
  186. }
  187. }