Table name as an constructor argument

Replaced worksheet argument with table name
This commit is contained in:
aswinkumar863 2022-04-17 17:48:38 +05:30
parent 44d63f027a
commit 530e6642bf
No known key found for this signature in database
GPG Key ID: 8A69BFA6AEF8FA3E
7 changed files with 63 additions and 81 deletions

View File

@ -52,9 +52,7 @@ $spreadsheet->getActiveSheet()->fromArray($dataArray, null, 'A2');
// Create Table // Create Table
$helper->log('Create Table'); $helper->log('Create Table');
$table = new Table(); $table = new Table('A1:D17', 'Sales_Data');
$table->setName('Sales_Data');
$table->setRange('A1:D17');
// Create Columns // Create Columns
$table->getColumn('D')->setShowFilterButton(false); $table->getColumn('D')->setShowFilterButton(false);

View File

@ -49,8 +49,7 @@ $spreadsheet->getActiveSheet()->fromArray($dataArray, null, 'A1');
// Create Table // Create Table
$helper->log('Create Table'); $helper->log('Create Table');
$table = new Table(); $table = new Table('A1:G15', 'Sales_Data');
$table->setName('Sales_Data');
$table->setRange('A1:G15'); $table->setRange('A1:G15');
// Set Column Formula // Set Column Formula

View File

@ -61,13 +61,14 @@ class Table
* Create a new Table. * Create a new Table.
* *
* @param string $range (e.g. A1:D4) * @param string $range (e.g. A1:D4)
* @param string $name (e.g. Table1)
* *
* @return $this * @return $this
*/ */
public function __construct(string $range = '', ?Worksheet $worksheet = null) public function __construct(string $range = '', string $name = '')
{ {
$this->setRange($range); $this->setRange($range);
$this->setWorksheet($worksheet); $this->setName($name);
$this->style = new TableStyle(); $this->style = new TableStyle();
} }
@ -86,6 +87,7 @@ class Table
{ {
$name = trim($name); $name = trim($name);
if (!empty($name)) {
if (strlen($name) === 1 && in_array($name, ['C', 'c', 'R', 'r'])) { if (strlen($name) === 1 && in_array($name, ['C', 'c', 'R', 'r'])) {
throw new PhpSpreadsheetException('The table name is invalid'); throw new PhpSpreadsheetException('The table name is invalid');
} }
@ -105,6 +107,7 @@ class Table
if (!preg_match('/^[\p{L}_\\\\][\p{L}\p{M}0-9\._]+$/iu', $name)) { if (!preg_match('/^[\p{L}_\\\\][\p{L}\p{M}0-9\._]+$/iu', $name)) {
throw new PhpSpreadsheetException('The table name contains invalid characters'); throw new PhpSpreadsheetException('The table name contains invalid characters');
} }
}
$this->name = $name; $this->name = $name;

View File

@ -2212,7 +2212,11 @@ class Worksheet implements IComparable
{ {
$cellRange = Coordinate::stringFromColumnIndex($columnIndex1) . $row1 . ':' . Coordinate::stringFromColumnIndex($columnIndex2) . $row2; $cellRange = Coordinate::stringFromColumnIndex($columnIndex1) . $row1 . ':' . Coordinate::stringFromColumnIndex($columnIndex2) . $row2;
return $this->addTable(new Table($cellRange, $this)); $table = new Table($cellRange);
$table->setWorksheet($this);
$this->addTable($table);
return $this;
} }
/** /**

View File

@ -12,7 +12,7 @@ class RemoveTableTest extends SetupTeardown
{ {
$sheet = $this->getSheet(); $sheet = $this->getSheet();
$table = new Table(self::INITIAL_RANGE, $sheet); $table = new Table(self::INITIAL_RANGE);
$table->setName('Table1'); $table->setName('Table1');
$sheet->addTable($table); $sheet->addTable($table);
@ -26,7 +26,7 @@ class RemoveTableTest extends SetupTeardown
{ {
$sheet = $this->getSheet(); $sheet = $this->getSheet();
$table = new Table(self::INITIAL_RANGE, $sheet); $table = new Table(self::INITIAL_RANGE);
$table->setName('Table1'); $table->setName('Table1');
$sheet->addTable($table); $sheet->addTable($table);

View File

@ -11,8 +11,7 @@ class TableStyleTest extends SetupTeardown
public function testVariousSets(): void public function testVariousSets(): void
{ {
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$style = $table->getStyle(); $style = $table->getStyle();
$result = $style->setTheme(TableStyle::TABLE_STYLE_DARK1); $result = $style->setTheme(TableStyle::TABLE_STYLE_DARK1);
@ -38,8 +37,7 @@ class TableStyleTest extends SetupTeardown
public function testTable(): void public function testTable(): void
{ {
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$style = new TableStyle(); $style = new TableStyle();
$style->setTable($table); $style->setTable($table);
self::assertEquals($table, $style->getTable()); self::assertEquals($table, $style->getTable());

View File

@ -14,8 +14,7 @@ class TableTest extends SetupTeardown
public function testToString(): void public function testToString(): void
{ {
$expectedResult = self::INITIAL_RANGE; $expectedResult = self::INITIAL_RANGE;
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
// magic __toString should return the active table range // magic __toString should return the active table range
$result = (string) $table; $result = (string) $table;
@ -27,8 +26,7 @@ class TableTest extends SetupTeardown
*/ */
public function testValidTableNames(string $name, string $expected): void public function testValidTableNames(string $name, string $expected): void
{ {
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$result = $table->setName($name); $result = $table->setName($name);
self::assertInstanceOf(Table::class, $result); self::assertInstanceOf(Table::class, $result);
@ -38,6 +36,7 @@ class TableTest extends SetupTeardown
public function validTableNamesProvider(): array public function validTableNamesProvider(): array
{ {
return [ return [
['', ''],
['Table_1', 'Table_1'], ['Table_1', 'Table_1'],
['_table_2', '_table_2'], ['_table_2', '_table_2'],
['\table_3', '\table_3'], ['\table_3', '\table_3'],
@ -52,8 +51,7 @@ class TableTest extends SetupTeardown
*/ */
public function testInvalidTableNames(string $name): void public function testInvalidTableNames(string $name): void
{ {
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$this->expectException(PhpSpreadsheetException::class); $this->expectException(PhpSpreadsheetException::class);
@ -95,8 +93,7 @@ class TableTest extends SetupTeardown
public function testVariousSets(): void public function testVariousSets(): void
{ {
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$result = $table->setShowHeaderRow(false); $result = $table->setShowHeaderRow(false);
self::assertInstanceOf(Table::class, $result); self::assertInstanceOf(Table::class, $result);
@ -110,15 +107,15 @@ class TableTest extends SetupTeardown
public function testGetWorksheet(): void public function testGetWorksheet(): void
{ {
$sheet = $this->getSheet(); $sheet = $this->getSheet();
$table = new Table(self::INITIAL_RANGE, $sheet); $table = new Table(self::INITIAL_RANGE);
$sheet->addTable($table);
$result = $table->getWorksheet(); $result = $table->getWorksheet();
self::assertSame($sheet, $result); self::assertSame($sheet, $result);
} }
public function testSetWorksheet(): void public function testSetWorksheet(): void
{ {
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$spreadsheet = $this->getSpreadsheet(); $spreadsheet = $this->getSpreadsheet();
$sheet2 = $spreadsheet->createSheet(); $sheet2 = $spreadsheet->createSheet();
// Setters return the instance to implement the fluent interface // Setters return the instance to implement the fluent interface
@ -129,8 +126,7 @@ class TableTest extends SetupTeardown
public function testGetRange(): void public function testGetRange(): void
{ {
$expectedResult = self::INITIAL_RANGE; $expectedResult = self::INITIAL_RANGE;
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
// Result should be the active table range // Result should be the active table range
$result = $table->getRange(); $result = $table->getRange();
@ -141,7 +137,7 @@ class TableTest extends SetupTeardown
{ {
$sheet = $this->getSheet(); $sheet = $this->getSheet();
$title = $sheet->getTitle(); $title = $sheet->getTitle();
$table = new Table(self::INITIAL_RANGE, $sheet); $table = new Table(self::INITIAL_RANGE);
$ranges = [ $ranges = [
'G1:J512' => "$title!G1:J512", 'G1:J512' => "$title!G1:J512",
'K1:N20' => 'K1:N20', 'K1:N20' => 'K1:N20',
@ -161,8 +157,7 @@ class TableTest extends SetupTeardown
public function testClearRange(): void public function testClearRange(): void
{ {
$expectedResult = ''; $expectedResult = '';
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
// Setters return the instance to implement the fluent interface // Setters return the instance to implement the fluent interface
$result = $table->setRange(''); $result = $table->setRange('');
@ -180,8 +175,7 @@ class TableTest extends SetupTeardown
{ {
$this->expectException(PhpSpreadsheetException::class); $this->expectException(PhpSpreadsheetException::class);
$sheet = $this->getSheet(); new Table($range);
new Table($range, $sheet);
} }
public function invalidTableRangeProvider(): array public function invalidTableRangeProvider(): array
@ -198,8 +192,7 @@ class TableTest extends SetupTeardown
public function testGetColumnsEmpty(): void public function testGetColumnsEmpty(): void
{ {
// There should be no columns yet defined // There should be no columns yet defined
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$result = $table->getColumns(); $result = $table->getColumns();
self::assertIsArray($result); self::assertIsArray($result);
self::assertCount(0, $result); self::assertCount(0, $result);
@ -212,8 +205,7 @@ class TableTest extends SetupTeardown
'K' => 3, 'K' => 3,
'M' => 5, 'M' => 5,
]; ];
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
// If we request a specific column by its column ID, we should get an // If we request a specific column by its column ID, we should get an
// integer returned representing the column offset within the range // integer returned representing the column offset within the range
@ -296,8 +288,7 @@ class TableTest extends SetupTeardown
public function testSetColumnWithString(): void public function testSetColumnWithString(): void
{ {
$expectedResult = 'L'; $expectedResult = 'L';
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
// Setters return the instance to implement the fluent interface // Setters return the instance to implement the fluent interface
$result = $table->setColumn($expectedResult); $result = $table->setColumn($expectedResult);
@ -315,8 +306,7 @@ class TableTest extends SetupTeardown
public function testSetInvalidColumnWithString(): void public function testSetInvalidColumnWithString(): void
{ {
$this->expectException(PhpSpreadsheetException::class); $this->expectException(PhpSpreadsheetException::class);
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$invalidColumn = 'A'; $invalidColumn = 'A';
$table->setColumn($invalidColumn); $table->setColumn($invalidColumn);
@ -326,8 +316,7 @@ class TableTest extends SetupTeardown
{ {
$expectedResult = 'M'; $expectedResult = 'M';
$columnObject = new Column($expectedResult); $columnObject = new Column($expectedResult);
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
// Setters return the instance to implement the fluent interface // Setters return the instance to implement the fluent interface
$result = $table->setColumn($columnObject); $result = $table->setColumn($columnObject);
@ -347,8 +336,7 @@ class TableTest extends SetupTeardown
$this->expectException(PhpSpreadsheetException::class); $this->expectException(PhpSpreadsheetException::class);
$invalidColumn = 'E'; $invalidColumn = 'E';
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$table->setColumn($invalidColumn); $table->setColumn($invalidColumn);
} }
@ -356,8 +344,7 @@ class TableTest extends SetupTeardown
{ {
$this->expectException(PhpSpreadsheetException::class); $this->expectException(PhpSpreadsheetException::class);
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$invalidColumn = 123.456; $invalidColumn = 123.456;
// @phpstan-ignore-next-line // @phpstan-ignore-next-line
$table->setColumn($invalidColumn); $table->setColumn($invalidColumn);
@ -365,8 +352,7 @@ class TableTest extends SetupTeardown
public function testGetColumns(): void public function testGetColumns(): void
{ {
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$columnIndexes = ['L', 'M']; $columnIndexes = ['L', 'M'];
@ -391,8 +377,7 @@ class TableTest extends SetupTeardown
public function testGetColumn(): void public function testGetColumn(): void
{ {
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$columnIndexes = ['L', 'M']; $columnIndexes = ['L', 'M'];
@ -410,8 +395,7 @@ class TableTest extends SetupTeardown
public function testGetColumnByOffset(): void public function testGetColumnByOffset(): void
{ {
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$columnIndexes = [ $columnIndexes = [
0 => 'H', 0 => 'H',
@ -430,8 +414,7 @@ class TableTest extends SetupTeardown
public function testGetColumnIfNotSet(): void public function testGetColumnIfNotSet(): void
{ {
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
// If we request a specific column by its column ID, we should // If we request a specific column by its column ID, we should
// get a \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet\Table\Column object returned // get a \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet\Table\Column object returned
$result = $table->getColumn('K'); $result = $table->getColumn('K');
@ -441,8 +424,7 @@ class TableTest extends SetupTeardown
public function testGetColumnWithoutRangeSet(): void public function testGetColumnWithoutRangeSet(): void
{ {
$this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class);
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
// Clear the range // Clear the range
$table->setRange(''); $table->setRange('');
@ -451,8 +433,7 @@ class TableTest extends SetupTeardown
public function testClearRangeWithExistingColumns(): void public function testClearRangeWithExistingColumns(): void
{ {
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$expectedResult = ''; $expectedResult = '';
$columnIndexes = ['L', 'M', 'N']; $columnIndexes = ['L', 'M', 'N'];
@ -476,8 +457,7 @@ class TableTest extends SetupTeardown
public function testSetRangeWithExistingColumns(): void public function testSetRangeWithExistingColumns(): void
{ {
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$expectedResult = 'G1:J512'; $expectedResult = 'G1:J512';
// These columns should be retained // These columns should be retained
@ -509,7 +489,8 @@ class TableTest extends SetupTeardown
public function testClone(): void public function testClone(): void
{ {
$sheet = $this->getSheet(); $sheet = $this->getSheet();
$table = new Table(self::INITIAL_RANGE, $sheet); $table = new Table(self::INITIAL_RANGE);
$sheet->addTable($table);
$columnIndexes = ['L', 'M']; $columnIndexes = ['L', 'M'];
foreach ($columnIndexes as $columnIndex) { foreach ($columnIndexes as $columnIndex) {
@ -546,8 +527,7 @@ class TableTest extends SetupTeardown
public function testClearColumn(): void public function testClearColumn(): void
{ {
$sheet = $this->getSheet(); $table = new Table(self::INITIAL_RANGE);
$table = new Table(self::INITIAL_RANGE, $sheet);
$columnIndexes = ['J', 'K', 'L', 'M']; $columnIndexes = ['J', 'K', 'L', 'M'];
foreach ($columnIndexes as $columnIndex) { foreach ($columnIndexes as $columnIndex) {