ContentTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Writer\Ods;
  3. use PhpOffice\PhpSpreadsheet\Calculation\Functions;
  4. use PhpOffice\PhpSpreadsheet\Cell\DataType;
  5. use PhpOffice\PhpSpreadsheet\Shared\Date;
  6. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  7. use PhpOffice\PhpSpreadsheet\Style\Color;
  8. use PhpOffice\PhpSpreadsheet\Style\Fill;
  9. use PhpOffice\PhpSpreadsheet\Style\Font;
  10. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  11. use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
  12. use PhpOffice\PhpSpreadsheet\Writer\Ods;
  13. use PhpOffice\PhpSpreadsheet\Writer\Ods\Content;
  14. use PHPUnit\Framework\TestCase;
  15. class ContentTest extends TestCase
  16. {
  17. /**
  18. * @var string
  19. */
  20. private $samplesPath = 'tests/data/Writer/Ods';
  21. /**
  22. * @var string
  23. */
  24. /**
  25. * @var string
  26. */
  27. private $compatibilityMode;
  28. protected function setUp(): void
  29. {
  30. parent::setUp();
  31. $this->compatibilityMode = Functions::getCompatibilityMode();
  32. Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE);
  33. }
  34. protected function tearDown(): void
  35. {
  36. parent::tearDown();
  37. Functions::setCompatibilityMode($this->compatibilityMode);
  38. }
  39. public function testWriteEmptySpreadsheet(): void
  40. {
  41. $content = new Content(new Ods(new Spreadsheet()));
  42. $xml = $content->write();
  43. self::assertXmlStringEqualsXmlFile($this->samplesPath . '/content-empty.xml', $xml);
  44. }
  45. public function testWriteSpreadsheet(): void
  46. {
  47. $workbook = new Spreadsheet();
  48. // Worksheet 1
  49. $worksheet1 = $workbook->getActiveSheet();
  50. $worksheet1->setCellValue('A1', 1); // Number
  51. $worksheet1->setCellValue('B1', 12345.6789); // Number
  52. $worksheet1->setCellValue('C1', '1'); // Number without cast
  53. $worksheet1->setCellValueExplicit('D1', '01234', DataType::TYPE_STRING); // Number casted to string
  54. $worksheet1->setCellValue('E1', 'Lorem ipsum'); // String
  55. $worksheet1->setCellValue('A2', true); // Boolean
  56. $worksheet1->setCellValue('B2', false); // Boolean
  57. $worksheet1->setCellValueExplicit(
  58. 'C2',
  59. '=IF(A3, CONCATENATE(A1, " ", A2), CONCATENATE(A2, " ", A1))',
  60. DataType::TYPE_FORMULA
  61. ); // Formula
  62. $worksheet1->setCellValue('D2', Date::PHPToExcel(1488635026)); // Date
  63. $worksheet1->getStyle('D2')
  64. ->getNumberFormat()
  65. ->setFormatCode(NumberFormat::FORMAT_DATE_DATETIME);
  66. $worksheet1->setCellValueExplicit('F1', null, DataType::TYPE_ERROR);
  67. $worksheet1->setCellValueExplicit('G1', 'Lorem ipsum', DataType::TYPE_INLINE);
  68. // Styles
  69. $worksheet1->getStyle('A1')->getFont()->setBold(true);
  70. $worksheet1->getStyle('B1')->getFont()->setItalic(true);
  71. $worksheet1->getStyle('C1')->getFont()->setName('Courier');
  72. $worksheet1->getStyle('C1')->getFont()->setSize(14);
  73. $worksheet1->getStyle('C1')->getFont()->setColor(new Color(Color::COLOR_BLUE));
  74. $worksheet1->getStyle('C1')->getFill()->setFillType(Fill::FILL_SOLID);
  75. $worksheet1->getStyle('C1')->getFill()->setStartColor(new Color(Color::COLOR_RED));
  76. $worksheet1->getStyle('C1')->getFont()->setUnderline(Font::UNDERLINE_SINGLE);
  77. $worksheet1->getStyle('C2')->getFont()->setUnderline(Font::UNDERLINE_DOUBLE);
  78. $worksheet1->getStyle('D2')->getFont()->setUnderline(Font::UNDERLINE_NONE);
  79. // Worksheet 2
  80. $worksheet2 = $workbook->createSheet();
  81. $worksheet2->setTitle('New Worksheet');
  82. $worksheet2->setCellValue('A1', 2);
  83. // Write
  84. $content = new Content(new Ods($workbook));
  85. $xml = $content->write();
  86. self::assertXmlStringEqualsXmlFile($this->samplesPath . '/content-with-data.xml', $xml);
  87. }
  88. public function testWriteWithHiddenWorksheet(): void
  89. {
  90. $workbook = new Spreadsheet();
  91. // Worksheet 1
  92. $worksheet1 = $workbook->getActiveSheet();
  93. $worksheet1->setCellValue('A1', 1);
  94. // Worksheet 2
  95. $worksheet2 = $workbook->createSheet();
  96. $worksheet2->setTitle('New Worksheet');
  97. $worksheet2->setCellValue('A1', 2);
  98. $worksheet2->setSheetState(Worksheet::SHEETSTATE_HIDDEN);
  99. // Write
  100. $content = new Content(new Ods($workbook));
  101. $xml = $content->write();
  102. self::assertXmlStringEqualsXmlFile($this->samplesPath . '/content-hidden-worksheet.xml', $xml);
  103. }
  104. }