NamedRangeTest.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests;
  3. use PhpOffice\PhpSpreadsheet\NamedRange;
  4. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  5. use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
  6. use PHPUnit\Framework\TestCase;
  7. class NamedRangeTest extends TestCase
  8. {
  9. /** @var Spreadsheet */
  10. private $spreadsheet;
  11. protected function setUp(): void
  12. {
  13. parent::setUp();
  14. $this->spreadsheet = new Spreadsheet();
  15. $this->spreadsheet->getActiveSheet()
  16. ->setTitle('Sheet #1');
  17. $worksheet2 = new Worksheet();
  18. $worksheet2->setTitle('Sheet #2');
  19. $this->spreadsheet->addSheet($worksheet2);
  20. $this->spreadsheet->setActiveSheetIndex(0);
  21. }
  22. public function testAddNamedRange(): void
  23. {
  24. $this->spreadsheet->addNamedRange(
  25. new NamedRange('Foo', $this->spreadsheet->getActiveSheet(), '=A1')
  26. );
  27. self::assertCount(1, $this->spreadsheet->getDefinedNames());
  28. self::assertCount(1, $this->spreadsheet->getNamedRanges());
  29. self::assertCount(0, $this->spreadsheet->getNamedFormulae());
  30. }
  31. public function testAddDuplicateNamedRange(): void
  32. {
  33. $this->spreadsheet->addNamedRange(
  34. new NamedRange('Foo', $this->spreadsheet->getActiveSheet(), '=A1')
  35. );
  36. $this->spreadsheet->addNamedRange(
  37. new NamedRange('FOO', $this->spreadsheet->getActiveSheet(), '=B1')
  38. );
  39. self::assertCount(1, $this->spreadsheet->getNamedRanges());
  40. $range = $this->spreadsheet->getNamedRange('foo', $this->spreadsheet->getActiveSheet());
  41. self::assertNotNull($range);
  42. self::assertSame(
  43. '=B1',
  44. $range->getValue()
  45. );
  46. }
  47. public function testAddScopedNamedRangeWithSameName(): void
  48. {
  49. $this->spreadsheet->addNamedRange(
  50. new NamedRange('Foo', $this->spreadsheet->getActiveSheet(), '=A1')
  51. );
  52. $this->spreadsheet->addNamedRange(
  53. new NamedRange('FOO', $this->spreadsheet->getSheetByNameOrThrow('Sheet #2'), '=B1', true)
  54. );
  55. self::assertCount(2, $this->spreadsheet->getNamedRanges());
  56. $range = $this->spreadsheet->getNamedRange('foo', $this->spreadsheet->getActiveSheet());
  57. self::assertNotNull($range);
  58. self::assertSame(
  59. '=A1',
  60. $range->getValue()
  61. );
  62. $range = $this->spreadsheet->getNamedRange('foo', $this->spreadsheet->getSheetByNameOrThrow('Sheet #2'));
  63. self::assertNotNull($range);
  64. self::assertSame(
  65. '=B1',
  66. $range->getValue()
  67. );
  68. }
  69. public function testRemoveNamedRange(): void
  70. {
  71. $this->spreadsheet->addDefinedName(
  72. new NamedRange('Foo', $this->spreadsheet->getActiveSheet(), '=A1')
  73. );
  74. $this->spreadsheet->addDefinedName(
  75. new NamedRange('Bar', $this->spreadsheet->getActiveSheet(), '=B1')
  76. );
  77. $this->spreadsheet->removeNamedRange('Foo', $this->spreadsheet->getActiveSheet());
  78. self::assertCount(1, $this->spreadsheet->getNamedRanges());
  79. }
  80. public function testRemoveGlobalNamedRangeWhenDuplicateNames(): void
  81. {
  82. $this->spreadsheet->addNamedRange(
  83. new NamedRange('Foo', $this->spreadsheet->getActiveSheet(), '=A1')
  84. );
  85. $this->spreadsheet->addNamedRange(
  86. new NamedRange('FOO', $this->spreadsheet->getSheetByNameOrThrow('Sheet #2'), '=B1', true)
  87. );
  88. $this->spreadsheet->removeNamedRange('Foo', $this->spreadsheet->getActiveSheet());
  89. self::assertCount(1, $this->spreadsheet->getNamedRanges());
  90. $sheet = $this->spreadsheet->getNamedRange('foo', $this->spreadsheet->getSheetByNameOrThrow('Sheet #2'));
  91. self::assertNotNull($sheet);
  92. self::assertSame(
  93. '=B1',
  94. $sheet->getValue()
  95. );
  96. }
  97. public function testRemoveScopedNamedRangeWhenDuplicateNames(): void
  98. {
  99. $this->spreadsheet->addNamedRange(
  100. new NamedRange('Foo', $this->spreadsheet->getActiveSheet(), '=A1')
  101. );
  102. $this->spreadsheet->addNamedRange(
  103. new NamedRange('FOO', $this->spreadsheet->getSheetByNameOrThrow('Sheet #2'), '=B1', true)
  104. );
  105. $this->spreadsheet->removeNamedRange('Foo', $this->spreadsheet->getSheetByNameOrThrow('Sheet #2'));
  106. self::assertCount(1, $this->spreadsheet->getNamedRanges());
  107. $range = $this->spreadsheet->getNamedRange('foo');
  108. self::AssertNotNull($range);
  109. self::assertSame(
  110. '=A1',
  111. $range->getValue()
  112. );
  113. }
  114. public function testRemoveNonExistentNamedRange(): void
  115. {
  116. self::assertCount(0, $this->spreadsheet->getNamedRanges());
  117. $this->spreadsheet->removeNamedRange('Any');
  118. }
  119. }