diff --git a/composer.json b/composer.json index a45828d..edf200e 100644 --- a/composer.json +++ b/composer.json @@ -32,10 +32,7 @@ "avadim/fast-excel-writer": "^4.8", "avadim/fast-excel-reader": "^2.11" }, - "funding": [ - { - "type": "other", - "url": "https://www.paypal.me/VShemarov" - } - ] + "require-dev": { + "phpunit/phpunit": "^9.0" + } } diff --git a/src/FastExcelTemplator/ExcelWriter.php b/src/FastExcelTemplator/ExcelWriter.php index 4f6a5ed..f4a960a 100644 --- a/src/FastExcelTemplator/ExcelWriter.php +++ b/src/FastExcelTemplator/ExcelWriter.php @@ -29,7 +29,11 @@ public function makeSheet(string $sheetName = null): SheetWriter */ public function replaceSheets($inputFile, $outputFile): bool { - $result = $this->writer->_replaceSheets($inputFile, $outputFile); + $relationShips = [ + 'rel_id' => ['workbook' => 0], + ]; + + $result = $this->writer->_replaceSheets($inputFile, $outputFile, $relationShips); if ($result) { $zip = new \ZipArchive(); if (!$zip->open($outputFile)) { diff --git a/src/FastExcelTemplator/RowTemplate.php b/src/FastExcelTemplator/RowTemplate.php index e73611f..76ad547 100644 --- a/src/FastExcelTemplator/RowTemplate.php +++ b/src/FastExcelTemplator/RowTemplate.php @@ -68,24 +68,30 @@ public function attribute($name): ?string return $this->attributes[$name] ?? null; } + #[\ReturnTypeWillChange] public function current() { return current($this->domCells); } + #[\ReturnTypeWillChange] public function key() { return key($this->domCells); } + #[\ReturnTypeWillChange] public function next() { return next($this->domCells); } + + #[\ReturnTypeWillChange] public function rewind() { return reset($this->domCells); } + public function valid(): bool { return (bool)current($this->domCells); diff --git a/tests/FastExcelTemplatorTest.php b/tests/FastExcelTemplatorTest.php new file mode 100644 index 0000000..e757a25 --- /dev/null +++ b/tests/FastExcelTemplatorTest.php @@ -0,0 +1,89 @@ +sheet(); + + $fillData = [ + '{{COMPANY}}' => 'Comp Stock Shop', + '{{ADDRESS}}' => '123 ABC Street', + '{{CITY}}' => 'Peace City, TN', + ]; + $replaceData = ['{{BULK_QTY}}' => 12, '{{DATE}}' => date('m/d/Y')]; + $list = [ + [ + 'number' => 'AA-8465-947563', + 'description' => 'NEC Mate Type ML PC-MK29MLZD1FWG (Corei5-3470S/2GB/250GB/Multi/No OF/Win 11 Home)', + 'price1' => 816, + 'price2' => 683, + ], + [ + 'number' => 'QR-7956-048914', + 'description' => 'Acer Aspire TC-1760-UA92 (Core i5-12400/12GB 3200MHz DDR4/512GB SSD/Win 11 Home)', + 'price1' => 414, + 'price2' => 339, + ], + [ + 'number' => 'BD-3966-285936', + 'description' => 'Dell Optiplex 7050 SFF (Core i7-7700/32GB DDR4/1TB SSD/Win 10 Pro/Renewed)', + 'price1' => 249, + 'price2' => 198, + ], + ]; + + $sheet + ->fill($fillData) + ->replace($replaceData) + ; + $rowTemplate = $sheet->getRowTemplate(6); + $count = 0; + foreach ($list as $record) { + $rowData = [ + // In the column A wil be written value from field 'number' + 'A' => $record['number'], + // In the column B wil be written value from field 'description' + 'B' => $record['description'], + // And so on... + 'C' => $record['price1'], + 'D' => $record['price2'], + ]; + if ($count++ === 0) { + // First we replace the row 6 (this is template row) + $sheet->replaceRow(6, $rowTemplate, $rowData); + } + else { + // Then we add new rows after last touched + $sheet->insertRowAfterLast($rowTemplate, $rowData); + } + } + $excel->save(); + $this->assertTrue(is_file($out)); + + $excelReader = \avadim\FastExcelReader\Excel::open($out); + $cells = $excelReader->readCells(); + + $this->assertEquals($fillData['{{COMPANY}}'], $cells['A1']); + $this->assertEquals('*Bulk pricing applies to quantities of 12 or more', $cells['D3']); + $this->assertEquals(249, $cells['C8']); + + unlink($out); + } + +} + diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..bf354f2 --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,11 @@ +