mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-09-15 04:26:25 +00:00
1876d6062f
Building on PR #3508 and PR #4393, which allowed ignoring 5 different cell 'errors'. Adding this new one should have been dead easy, but MS, in its own inscrutable way, decided to complicate this by making the xml attribute require its very own namespace, unlike any of its relatives. There are supposed to be several ways to activate this tag. One is to enter a date in cell A1, then in cell B1 enter the formula `=A1`, and set B1's numeric format to `General`.
161 lines
6.7 KiB
PHP
161 lines
6.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Cell\DataType;
|
|
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
|
|
|
|
class IgnoredErrorTest extends AbstractFunctional
|
|
{
|
|
private const FILENAME = 'tests/data/Reader/XLSX/ignoreerror.xlsx';
|
|
|
|
private const FILENAME2 = 'tests/data/Reader/XLSX/misleading.xlsx';
|
|
|
|
public function testIgnoredError(): void
|
|
{
|
|
$reader = new Xlsx();
|
|
$originalSpreadsheet = $reader->load(self::FILENAME);
|
|
$spreadsheet = $this->writeAndReload($originalSpreadsheet, 'Xlsx');
|
|
$originalSpreadsheet->disconnectWorksheets();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
self::assertFalse($sheet->getCell('A1')->getIgnoredErrors()->getNumberStoredAsText());
|
|
self::assertTrue($sheet->getCell('A2')->getIgnoredErrors()->getNumberStoredAsText());
|
|
self::assertFalse($sheet->getCell('A3')->getIgnoredErrors()->getNumberStoredAsText());
|
|
self::assertTrue($sheet->getCell('A4')->getIgnoredErrors()->getNumberStoredAsText());
|
|
self::assertFalse($sheet->getCell('H2')->getIgnoredErrors()->getNumberStoredAsText());
|
|
self::assertTrue($sheet->getCell('H3')->getIgnoredErrors()->getNumberStoredAsText());
|
|
self::assertFalse($sheet->getCell('I2')->getIgnoredErrors()->getNumberStoredAsText());
|
|
self::assertTrue($sheet->getCell('I3')->getIgnoredErrors()->getNumberStoredAsText());
|
|
|
|
self::assertFalse($sheet->getCell('H3')->getIgnoredErrors()->getFormula());
|
|
self::assertFalse($sheet->getCell('D2')->getIgnoredErrors()->getFormula());
|
|
self::assertTrue($sheet->getCell('D3')->getIgnoredErrors()->getFormula());
|
|
|
|
self::assertFalse($sheet->getCell('A11')->getIgnoredErrors()->getTwoDigitTextYear());
|
|
self::assertTrue($sheet->getCell('A12')->getIgnoredErrors()->getTwoDigitTextYear());
|
|
|
|
self::assertFalse($sheet->getCell('C12')->getIgnoredErrors()->getEvalError());
|
|
self::assertTrue($sheet->getCell('C11')->getIgnoredErrors()->getEvalError());
|
|
self::assertFalse($sheet->getCell('E14')->getIgnoredErrors()->getFormulaRange());
|
|
self::assertTrue($sheet->getCell('F14')->getIgnoredErrors()->getFormulaRange());
|
|
|
|
$sheetLast = $spreadsheet->getSheetByNameOrThrow('Last');
|
|
self::assertFalse($sheetLast->getCell('D2')->getIgnoredErrors()->getFormula());
|
|
self::assertFalse($sheetLast->getCell('D3')->getIgnoredErrors()->getFormula(), 'prior sheet ignoredErrors shouldn\'t bleed');
|
|
self::assertFalse($sheetLast->getCell('A1')->getIgnoredErrors()->getNumberStoredAsText());
|
|
self::assertFalse($sheetLast->getCell('A2')->getIgnoredErrors()->getNumberStoredAsText());
|
|
self::assertTrue($sheetLast->getCell('A3')->getIgnoredErrors()->getNumberStoredAsText());
|
|
self::assertFalse($sheetLast->getCell('A4')->getIgnoredErrors()->getNumberStoredAsText(), 'prior sheet numberStoredAsText shouldn\'t bleed');
|
|
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public function testSetIgnoredError(): void
|
|
{
|
|
$originalSpreadsheet = new Spreadsheet();
|
|
$originalSheet = $originalSpreadsheet->getActiveSheet();
|
|
$originalSheet->getCell('A1')->setValueExplicit('0', DataType::TYPE_STRING);
|
|
$originalSheet->getCell('A2')->setValueExplicit('1', DataType::TYPE_STRING);
|
|
$originalSheet->getStyle('A1:A2')->setQuotePrefix(true);
|
|
$originalSheet->getCell('A2')->getIgnoredErrors()->setNumberStoredAsText(true);
|
|
$spreadsheet = $this->writeAndReload($originalSpreadsheet, 'Xlsx');
|
|
$originalSpreadsheet->disconnectWorksheets();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
self::assertSame('0', $sheet->getCell('A1')->getValue());
|
|
self::assertSame('1', $sheet->getCell('A2')->getValue());
|
|
self::assertFalse($sheet->getCell('A1')->getIgnoredErrors()->getNumberStoredAsText());
|
|
self::assertTrue($sheet->getCell('A2')->getIgnoredErrors()->getNumberStoredAsText());
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public function testMisleading(): void
|
|
{
|
|
$reader = new Xlsx();
|
|
$originalSpreadsheet = $reader->load(self::FILENAME2);
|
|
$sheet = $originalSpreadsheet->getActiveSheet();
|
|
self::assertTrue(
|
|
$sheet->getCell('C1')
|
|
->getIgnoredErrors()
|
|
->getMisleadingFormat()
|
|
);
|
|
self::assertFalse(
|
|
$sheet->getCell('C2')
|
|
->getIgnoredErrors()
|
|
->getMisleadingFormat()
|
|
);
|
|
self::assertFalse(
|
|
$sheet->getCell('C3')
|
|
->getIgnoredErrors()
|
|
->getMisleadingFormat()
|
|
);
|
|
self::assertTrue(
|
|
$sheet->getCell('D1')
|
|
->getIgnoredErrors()
|
|
->getNumberStoredAsText()
|
|
);
|
|
self::assertFalse(
|
|
$sheet->getCell('D2')
|
|
->getIgnoredErrors()
|
|
->getNumberStoredAsText()
|
|
);
|
|
self::assertFalse(
|
|
$sheet->getCell('D3')
|
|
->getIgnoredErrors()
|
|
->getNumberStoredAsText()
|
|
);
|
|
|
|
$sheet->getCell('C1')
|
|
->getIgnoredErrors()
|
|
->setMisleadingFormat(false);
|
|
$sheet->getCell('D1')
|
|
->getIgnoredErrors()
|
|
->setNumberStoredAsText(false);
|
|
$sheet->getCell('C2')
|
|
->getIgnoredErrors()
|
|
->setMisleadingFormat(true);
|
|
$sheet->getCell('D2')
|
|
->getIgnoredErrors()
|
|
->setNumberStoredAsText(true);
|
|
|
|
$spreadsheet = $this->writeAndReload($originalSpreadsheet, 'Xlsx');
|
|
$originalSpreadsheet->disconnectWorksheets();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
self::assertFalse(
|
|
$sheet->getCell('C1')
|
|
->getIgnoredErrors()
|
|
->getMisleadingFormat()
|
|
);
|
|
self::assertTrue(
|
|
$sheet->getCell('C2')
|
|
->getIgnoredErrors()
|
|
->getMisleadingFormat()
|
|
);
|
|
self::assertFalse(
|
|
$sheet->getCell('C3')
|
|
->getIgnoredErrors()
|
|
->getMisleadingFormat()
|
|
);
|
|
self::assertFalse(
|
|
$sheet->getCell('D1')
|
|
->getIgnoredErrors()
|
|
->getNumberStoredAsText()
|
|
);
|
|
self::assertTrue(
|
|
$sheet->getCell('D2')
|
|
->getIgnoredErrors()
|
|
->getNumberStoredAsText()
|
|
);
|
|
self::assertFalse(
|
|
$sheet->getCell('D3')
|
|
->getIgnoredErrors()
|
|
->getNumberStoredAsText()
|
|
);
|
|
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
}
|