Respect DataType in insertNewBefore (#2433)
`ReferenceHelper::insertNewBefore` copies data from one cell to another when adding/removing rows or columns. It now also respects the data type set for that cell and does not use value binder again.
This commit is contained in:
parent
e01a81ec5e
commit
aa91abc0d8
|
|
@ -426,7 +426,7 @@ class ReferenceHelper
|
||||||
->setValue($this->updateFormulaReferences($cell->getValue(), $beforeCellAddress, $numberOfColumns, $numberOfRows, $worksheet->getTitle()));
|
->setValue($this->updateFormulaReferences($cell->getValue(), $beforeCellAddress, $numberOfColumns, $numberOfRows, $worksheet->getTitle()));
|
||||||
} else {
|
} else {
|
||||||
// Formula should not be adjusted
|
// Formula should not be adjusted
|
||||||
$worksheet->getCell($newCoordinate)->setValue($cell->getValue());
|
$worksheet->getCell($newCoordinate)->setValueExplicit($cell->getValue(), $cell->getDataType());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear the original cell
|
// Clear the original cell
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,9 @@
|
||||||
|
|
||||||
namespace PhpOffice\PhpSpreadsheetTests;
|
namespace PhpOffice\PhpSpreadsheetTests;
|
||||||
|
|
||||||
|
use PhpOffice\PhpSpreadsheet\Cell\DataType;
|
||||||
use PhpOffice\PhpSpreadsheet\ReferenceHelper;
|
use PhpOffice\PhpSpreadsheet\ReferenceHelper;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
class ReferenceHelperTest extends TestCase
|
class ReferenceHelperTest extends TestCase
|
||||||
|
|
@ -129,4 +131,22 @@ class ReferenceHelperTest extends TestCase
|
||||||
{
|
{
|
||||||
return require 'tests/data/ReferenceHelperFormulaUpdatesMultipleSheet.php';
|
return require 'tests/data/ReferenceHelperFormulaUpdatesMultipleSheet.php';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testInsertNewBeforeRetainDataType(): void
|
||||||
|
{
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$cell = $sheet->getCell('A1');
|
||||||
|
$cell->setValueExplicit('+1', DataType::TYPE_STRING);
|
||||||
|
$oldDataType = $cell->getDataType();
|
||||||
|
$oldValue = $cell->getValue();
|
||||||
|
|
||||||
|
$sheet->insertNewRowBefore(1);
|
||||||
|
$newCell = $sheet->getCell('A2');
|
||||||
|
$newDataType = $newCell->getDataType();
|
||||||
|
$newValue = $newCell->getValue();
|
||||||
|
|
||||||
|
self::assertSame($oldValue, $newValue);
|
||||||
|
self::assertSame($oldDataType, $newDataType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue