| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- <?php
- namespace PhpOffice\PhpSpreadsheetTests;
- use PhpOffice\PhpSpreadsheet\Exception as ssException;
- use PhpOffice\PhpSpreadsheet\Spreadsheet;
- use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
- use PHPUnit\Framework\TestCase;
- class SpreadsheetTest extends TestCase
- {
- /** @var ?Spreadsheet */
- private $spreadsheet;
- protected function tearDown(): void
- {
- if ($this->spreadsheet !== null) {
- $this->spreadsheet->disconnectWorksheets();
- $this->spreadsheet = null;
- }
- }
- private function getSpreadsheet(): Spreadsheet
- {
- $this->spreadsheet = $spreadsheet = new Spreadsheet();
- $sheet = $spreadsheet->getActiveSheet();
- $sheet->setTitle('someSheet1');
- $sheet = new Worksheet();
- $sheet->setTitle('someSheet2');
- $spreadsheet->addSheet($sheet);
- $sheet = new Worksheet();
- $sheet->setTitle('someSheet 3');
- $spreadsheet->addSheet($sheet);
- return $spreadsheet;
- }
- public function dataProviderForSheetNames(): array
- {
- $array = [
- [0, 'someSheet1'],
- [0, "'someSheet1'"],
- [1, 'someSheet2'],
- [1, "'someSheet2'"],
- [2, 'someSheet 3'],
- [2, "'someSheet 3'"],
- [null, 'someSheet 33'],
- ];
- return $array;
- }
- /**
- * @dataProvider dataProviderForSheetNames
- */
- public function testGetSheetByName(?int $index, string $sheetName): void
- {
- $spreadsheet = $this->getSpreadsheet();
- if ($index === null) {
- self::assertNull($spreadsheet->getSheetByName($sheetName));
- } else {
- self::assertSame($spreadsheet->getSheet($index), $spreadsheet->getSheetByName($sheetName));
- }
- }
- public function testAddSheetDuplicateTitle(): void
- {
- $spreadsheet = $this->getSpreadsheet();
- $this->expectException(ssException::class);
- $sheet = new Worksheet();
- $sheet->setTitle('someSheet2');
- $spreadsheet->addSheet($sheet);
- }
- public function testAddSheetNoAdjustActive(): void
- {
- $spreadsheet = $this->getSpreadsheet();
- $spreadsheet->setActiveSheetIndex(2);
- self::assertEquals(2, $spreadsheet->getActiveSheetIndex());
- $sheet = new Worksheet();
- $sheet->setTitle('someSheet4');
- $spreadsheet->addSheet($sheet);
- self::assertEquals(2, $spreadsheet->getActiveSheetIndex());
- }
- public function testAddSheetAdjustActive(): void
- {
- $spreadsheet = $this->getSpreadsheet();
- $spreadsheet->setActiveSheetIndex(2);
- self::assertEquals(2, $spreadsheet->getActiveSheetIndex());
- $sheet = new Worksheet();
- $sheet->setTitle('someSheet0');
- $spreadsheet->addSheet($sheet, 0);
- self::assertEquals(3, $spreadsheet->getActiveSheetIndex());
- }
- public function testRemoveSheetIndexTooHigh(): void
- {
- $spreadsheet = $this->getSpreadsheet();
- $this->expectException(ssException::class);
- $spreadsheet->removeSheetByIndex(4);
- }
- public function testRemoveSheetNoAdjustActive(): void
- {
- $spreadsheet = $this->getSpreadsheet();
- $spreadsheet->setActiveSheetIndex(1);
- self::assertEquals(1, $spreadsheet->getActiveSheetIndex());
- $spreadsheet->removeSheetByIndex(2);
- self::assertEquals(1, $spreadsheet->getActiveSheetIndex());
- }
- public function testRemoveSheetAdjustActive(): void
- {
- $spreadsheet = $this->getSpreadsheet();
- $spreadsheet->setActiveSheetIndex(2);
- self::assertEquals(2, $spreadsheet->getActiveSheetIndex());
- $spreadsheet->removeSheetByIndex(1);
- self::assertEquals(1, $spreadsheet->getActiveSheetIndex());
- }
- public function testGetSheetIndexTooHigh(): void
- {
- $spreadsheet = $this->getSpreadsheet();
- $this->expectException(ssException::class);
- $spreadsheet->getSheet(4);
- }
- public function testGetIndexNonExistent(): void
- {
- $spreadsheet = $this->getSpreadsheet();
- $this->expectException(ssException::class);
- $sheet = new Worksheet();
- $sheet->setTitle('someSheet4');
- $spreadsheet->getIndex($sheet);
- }
- public function testSetIndexByName(): void
- {
- $spreadsheet = $this->getSpreadsheet();
- $spreadsheet->setIndexByName('someSheet1', 1);
- self::assertEquals('someSheet2', $spreadsheet->getSheet(0)->getTitle());
- self::assertEquals('someSheet1', $spreadsheet->getSheet(1)->getTitle());
- self::assertEquals('someSheet 3', $spreadsheet->getSheet(2)->getTitle());
- }
- public function testRemoveAllSheets(): void
- {
- $spreadsheet = $this->getSpreadsheet();
- $spreadsheet->setActiveSheetIndex(2);
- self::assertEquals(2, $spreadsheet->getActiveSheetIndex());
- $spreadsheet->removeSheetByIndex(0);
- self::assertEquals(1, $spreadsheet->getActiveSheetIndex());
- $spreadsheet->removeSheetByIndex(0);
- self::assertEquals(0, $spreadsheet->getActiveSheetIndex());
- $spreadsheet->removeSheetByIndex(0);
- self::assertEquals(-1, $spreadsheet->getActiveSheetIndex());
- $sheet = new Worksheet();
- $sheet->setTitle('someSheet4');
- $spreadsheet->addSheet($sheet);
- self::assertEquals(0, $spreadsheet->getActiveSheetIndex());
- }
- public function testBug1735(): void
- {
- $spreadsheet1 = new Spreadsheet();
- $spreadsheet1->createSheet()->setTitle('addedsheet');
- $spreadsheet1->setActiveSheetIndex(1);
- $spreadsheet1->removeSheetByIndex(0);
- $sheet = $spreadsheet1->getActiveSheet();
- self::assertEquals('addedsheet', $sheet->getTitle());
- }
- public function testSetActiveSheetIndexTooHigh(): void
- {
- $spreadsheet = $this->getSpreadsheet();
- $this->expectException(ssException::class);
- $spreadsheet->setActiveSheetIndex(4);
- }
- public function testSetActiveSheetNoSuchName(): void
- {
- $spreadsheet = $this->getSpreadsheet();
- $this->expectException(ssException::class);
- $spreadsheet->setActiveSheetIndexByName('unknown');
- }
- public function testAddExternal(): void
- {
- $spreadsheet = $this->getSpreadsheet();
- $spreadsheet1 = new Spreadsheet();
- $sheet = $spreadsheet1->createSheet()->setTitle('someSheet19');
- $sheet->getCell('A1')->setValue(1);
- $sheet->getCell('A1')->getStyle()->getFont()->setBold(true);
- $sheet->getCell('B1')->getStyle()->getFont()->setSuperscript(true);
- $sheet->getCell('C1')->getStyle()->getFont()->setSubscript(true);
- self::assertCount(4, $spreadsheet1->getCellXfCollection());
- self::assertEquals(1, $sheet->getCell('A1')->getXfIndex());
- $spreadsheet->getActiveSheet()->getCell('A1')->getStyle()->getFont()->setBold(true);
- self::assertCount(2, $spreadsheet->getCellXfCollection());
- $sheet3 = $spreadsheet->addExternalSheet($sheet);
- self::assertCount(6, $spreadsheet->getCellXfCollection());
- self::assertEquals('someSheet19', $sheet3->getTitle());
- self::assertEquals(1, $sheet3->getCell('A1')->getValue());
- self::assertTrue($sheet3->getCell('A1')->getStyle()->getFont()->getBold());
- // Prove Xf index changed although style is same.
- self::assertEquals(3, $sheet3->getCell('A1')->getXfIndex());
- }
- public function testAddExternalDuplicateName(): void
- {
- $this->expectException(ssException::class);
- $spreadsheet = new Spreadsheet();
- $sheet = $spreadsheet->createSheet()->setTitle('someSheet1');
- $sheet->getCell('A1')->setValue(1);
- $sheet->getCell('A1')->getStyle()->getFont()->setBold(true);
- $spreadsheet->addExternalSheet($sheet);
- }
- public function testAddExternalColumnDimensionStyles(): void
- {
- $spreadsheet1 = new Spreadsheet();
- $sheet1 = $spreadsheet1->createSheet()->setTitle('sheetWithColumnDimension');
- $sheet1->getCell('A1')->setValue(1);
- $sheet1->getCell('A1')->getStyle()->getFont()->setItalic(true);
- $sheet1->getColumnDimension('B')->setWidth(10)->setXfIndex($sheet1->getCell('A1')->getXfIndex());
- $index = $sheet1->getColumnDimension('B')->getXfIndex();
- self::assertEquals(1, $index);
- self::assertCount(2, $spreadsheet1->getCellXfCollection());
- $spreadsheet2 = new Spreadsheet();
- $sheet2 = $spreadsheet2->createSheet()->setTitle('sheetWithTwoStyles');
- $sheet2->getCell('A1')->setValue(1);
- $sheet2->getCell('A1')->getStyle()->getFont()->setBold(true);
- $sheet2->getCell('B2')->getStyle()->getFont()->setSuperscript(true);
- $countXfs = count($spreadsheet2->getCellXfCollection());
- self::assertEquals(3, $countXfs);
- $sheet3 = $spreadsheet2->addExternalSheet($sheet1);
- self::assertCount(5, $spreadsheet2->getCellXfCollection());
- self::assertTrue($sheet3->getCell('A1')->getStyle()->getFont()->getItalic());
- self::assertTrue($sheet3->getCell('B1')->getStyle()->getFont()->getItalic());
- self::assertFalse($sheet3->getCell('B1')->getStyle()->getFont()->getBold());
- // Prove Xf index changed although style is same.
- self::assertEquals($countXfs + $index, $sheet3->getCell('B1')->getXfIndex());
- self::assertEquals($countXfs + $index, $sheet3->getColumnDimension('B')->getXfIndex());
- }
- public function testAddExternalRowDimensionStyles(): void
- {
- $spreadsheet1 = new Spreadsheet();
- $sheet1 = $spreadsheet1->createSheet()->setTitle('sheetWithColumnDimension');
- $sheet1->getCell('A1')->setValue(1);
- $sheet1->getCell('A1')->getStyle()->getFont()->setItalic(true);
- $sheet1->getRowDimension(2)->setXfIndex($sheet1->getCell('A1')->getXfIndex());
- $index = $sheet1->getRowDimension(2)->getXfIndex();
- self::assertEquals(1, $index);
- self::assertCount(2, $spreadsheet1->getCellXfCollection());
- $spreadsheet2 = new Spreadsheet();
- $sheet2 = $spreadsheet2->createSheet()->setTitle('sheetWithTwoStyles');
- $sheet2->getCell('A1')->setValue(1);
- $sheet2->getCell('A1')->getStyle()->getFont()->setBold(true);
- $sheet2->getCell('B2')->getStyle()->getFont()->setSuperscript(true);
- $countXfs = count($spreadsheet2->getCellXfCollection());
- self::assertEquals(3, $countXfs);
- $sheet3 = $spreadsheet2->addExternalSheet($sheet1);
- self::assertCount(5, $spreadsheet2->getCellXfCollection());
- self::assertTrue($sheet3->getCell('A1')->getStyle()->getFont()->getItalic());
- self::assertTrue($sheet3->getCell('A2')->getStyle()->getFont()->getItalic());
- self::assertFalse($sheet3->getCell('A2')->getStyle()->getFont()->getBold());
- // Prove Xf index changed although style is same.
- self::assertEquals($countXfs + $index, $sheet3->getCell('A2')->getXfIndex());
- self::assertEquals($countXfs + $index, $sheet3->getRowDimension(2)->getXfIndex());
- }
- }
|