NamedRange2Test.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests;
  3. use PhpOffice\PhpSpreadsheet\DefinedName;
  4. use PhpOffice\PhpSpreadsheet\Exception as Except;
  5. use PhpOffice\PhpSpreadsheet\NamedRange;
  6. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  7. use PHPUnit\Framework\TestCase;
  8. class NamedRange2Test extends TestCase
  9. {
  10. /** @var ?Spreadsheet */
  11. private $spreadsheet;
  12. protected function setUp(): void
  13. {
  14. $spreadsheet = $this->spreadsheet = new Spreadsheet();
  15. $worksheet1 = $spreadsheet->getActiveSheet();
  16. $worksheet1->setTitle('SheetOne');
  17. $spreadsheet->addNamedRange(
  18. new NamedRange('FirstRel', $worksheet1, '=A1')
  19. );
  20. $spreadsheet->addNamedRange(
  21. new NamedRange('FirstAbs', $worksheet1, '=$B$1')
  22. );
  23. $spreadsheet->addNamedRange(
  24. new NamedRange('FirstRelMult', $worksheet1, '=C1:D2')
  25. );
  26. $spreadsheet->addNamedRange(
  27. new NamedRange('FirstAbsMult', $worksheet1, '$E$3:$F$4')
  28. );
  29. $worksheet2 = $spreadsheet->createSheet();
  30. $worksheet2->setTitle('SheetTwo');
  31. $spreadsheet->addNamedRange(
  32. new NamedRange('SecondRel', $worksheet2, '=A1')
  33. );
  34. $spreadsheet->addNamedRange(
  35. new NamedRange('SecondAbs', $worksheet2, '=$B$1')
  36. );
  37. $spreadsheet->addNamedRange(
  38. new NamedRange('SecondRelMult', $worksheet2, '=C1:D2')
  39. );
  40. $spreadsheet->addNamedRange(
  41. new NamedRange('SecondAbsMult', $worksheet2, '$E$3:$F$4')
  42. );
  43. $spreadsheet->addDefinedName(DefinedName::createInstance('FirstFormula', $worksheet1, '=TODAY()-1'));
  44. $spreadsheet->addDefinedName(DefinedName::createInstance('SecondFormula', $worksheet2, '=TODAY()-2'));
  45. $this->spreadsheet->setActiveSheetIndex(0);
  46. }
  47. protected function tearDown(): void
  48. {
  49. if ($this->spreadsheet !== null) {
  50. $this->spreadsheet->disconnectWorksheets();
  51. $this->spreadsheet = null;
  52. }
  53. }
  54. private function getSpreadsheet(): Spreadsheet
  55. {
  56. if ($this->spreadsheet !== null) {
  57. return $this->spreadsheet;
  58. }
  59. $this->spreadsheet = new Spreadsheet();
  60. return $this->spreadsheet;
  61. }
  62. public function testNamedRangeSetStyle(): void
  63. {
  64. $spreadsheet = $this->getSpreadsheet();
  65. $sheet = $spreadsheet->getSheet(0);
  66. $sheet->getStyle('FirstRel')->getNumberFormat()->setFormatCode('yyyy-mm-dd');
  67. self::assertSame('yyyy-mm-dd', $sheet->getStyle('A1')->getNumberFormat()->getFormatCode());
  68. $sheet->getStyle('FirstAbs')->getFont()->setName('Georgia');
  69. self::assertSame('Georgia', $sheet->getStyle('B1')->getFont()->getName());
  70. $sheet->getStyle('FirstRelMult')->getFont()->setItalic(true);
  71. self::assertTrue($sheet->getStyle('D2')->getFont()->getItalic());
  72. $sheet->getStyle('FirstAbsMult')->getFill()->setFillType('gray125');
  73. self::assertSame('gray125', $sheet->getStyle('F4')->getFill()->getFillType());
  74. self::assertSame('none', $sheet->getStyle('A1')->getFill()->getFillType());
  75. $sheet = $spreadsheet->getSheet(1);
  76. $sheet->getStyle('SecondAbsMult')->getFill()->setFillType('lightDown');
  77. self::assertSame('lightDown', $sheet->getStyle('E3')->getFill()->getFillType());
  78. }
  79. /**
  80. * @dataProvider providerRangeOrFormula
  81. */
  82. public function testNamedRangeSetStyleBad(string $name): void
  83. {
  84. $this->expectException(Except::class);
  85. $spreadsheet = $this->getSpreadsheet();
  86. $sheet = $spreadsheet->getSheet(0);
  87. $sheet->getStyle($name)->getNumberFormat()->setFormatCode('yyyy-mm-dd');
  88. self::assertSame('yyyy-mm-dd', $sheet->getStyle('A1')->getNumberFormat()->getFormatCode());
  89. }
  90. public function providerRangeOrFormula(): array
  91. {
  92. return [
  93. 'wrong sheet rel' => ['SecondRel'],
  94. 'wrong sheet abs' => ['SecondAbs'],
  95. 'wrong sheet relmult' => ['SecondRelMult'],
  96. 'wrong sheet absmult' => ['SecondAbsMult'],
  97. 'wrong sheet formula' => ['SecondFormula'],
  98. 'right sheet formula' => ['FirstFormula'],
  99. 'non-existent name' => ['NonExistentName'],
  100. 'this sheet name' => ['SheetOne!G7'],
  101. 'other sheet name' => ['SheetTwo!G7'],
  102. 'non-existent sheet name' => ['SheetAbc!G7'],
  103. 'unnamed formula' => ['=2+3'],
  104. ];
  105. }
  106. }