mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-09-10 01:56:26 +00:00
250394d128
Fix #347, which had gone stale but is now reopened. PhpSpreadsheet is automatically replacing CR-LF and CR with LF. The reason for this is unknown, although I suggest a possibility in the issue. I am not willing to make this a breaking change. This PR adds a new property `preserveCr` with setter and getter to DefaultValueBinder (and, by extension, to StringValueBinder and AdvancedValueBinder). The property defaults to false, but users who wish to preserve CR-LF and CR can set it to true for a Spreadsheet or a Reader.
61 lines
2.1 KiB
PHP
61 lines
2.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Shared;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder;
|
|
use PhpOffice\PhpSpreadsheet\Reader\BaseReader;
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
|
|
use PHPUnit\Framework\Attributes\DataProvider;
|
|
|
|
class Issue347Test extends AbstractFunctional
|
|
{
|
|
public function readerPreserveCr(BaseReader $reader): void
|
|
{
|
|
$binder = new DefaultValueBinder();
|
|
$binder->setPreserveCr(true);
|
|
$reader->setValueBinder($binder);
|
|
}
|
|
|
|
#[DataProvider('providerType')]
|
|
public function testPreserveCr(string $format): void
|
|
{
|
|
$s1 = "AB\r\nC\tD";
|
|
$spreadsheet = new Spreadsheet();
|
|
$binder = new DefaultValueBinder();
|
|
$binder->setPreserveCr(true);
|
|
$spreadsheet->setValueBinder($binder);
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
$sheet->getCell('A1')->setValue($s1);
|
|
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format, readerCustomizer: $this->readerPreserveCr(...));
|
|
$spreadsheet->disconnectWorksheets();
|
|
$rsheet = $reloadedSpreadsheet->getActiveSheet();
|
|
$s2 = $rsheet->getCell('A1')->getValue();
|
|
self::assertSame($s1, $s2);
|
|
$reloadedSpreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
#[DataProvider('providerType')]
|
|
public function testNoPreserveCr(string $format): void
|
|
{
|
|
$s1 = "AB\r\nC\tD";
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
$sheet->getCell('A1')->setValue($s1);
|
|
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format);
|
|
$spreadsheet->disconnectWorksheets();
|
|
$rsheet = $reloadedSpreadsheet->getActiveSheet();
|
|
$s2 = $rsheet->getCell('A1')->getValue();
|
|
self::assertNotEquals($s1, $s2);
|
|
self::assertSame("AB\nC\tD", $s2);
|
|
$reloadedSpreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public static function providerType(): array
|
|
{
|
|
return [['Xls'], ['Xlsx'], ['Ods']];
|
|
}
|
|
}
|