91 lines
4.2 KiB
PHP
91 lines
4.2 KiB
PHP
<?php
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Calculation;
|
|
|
|
use PhpOffice\PhpSpreadsheet\NamedRange as NamedRange;
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class IsFormulaTest extends TestCase
|
|
{
|
|
public function testIsFormula(): void
|
|
{
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet1 = $spreadsheet->getActiveSheet();
|
|
$sheet1->setTitle('SheetOne'); // no space in sheet title
|
|
$sheet2 = $spreadsheet->createSheet();
|
|
$sheet2->setTitle('Sheet Two'); // space in sheet title
|
|
$values = [
|
|
[null, false],
|
|
[-1, false],
|
|
[0, false],
|
|
[1, false],
|
|
['', false],
|
|
[false, false],
|
|
[true, false],
|
|
['=-1', true],
|
|
['="ABC"', true],
|
|
['=SUM(1,2,3)', true],
|
|
];
|
|
$row = 0;
|
|
foreach ($values as $valArray) {
|
|
++$row;
|
|
if ($valArray[0] !== null) {
|
|
$sheet1->getCell("A$row")->setValue($valArray[0]);
|
|
}
|
|
$sheet1->getCell("B$row")->setValue("=ISFORMULA(A$row)");
|
|
self::assertSame($valArray[1], $sheet1->getCell("B$row")->getCalculatedValue(), "sheet1 error in B$row");
|
|
}
|
|
$row = 0;
|
|
foreach ($values as $valArray) {
|
|
++$row;
|
|
if ($valArray[0] !== null) {
|
|
$sheet2->getCell("A$row")->setValue($valArray[0]);
|
|
}
|
|
$sheet2->getCell("B$row")->setValue("=ISFORMULA(A$row)");
|
|
self::assertSame($valArray[1], $sheet2->getCell("B$row")->getCalculatedValue(), "sheet2 error in B$row");
|
|
}
|
|
$sheet1->getCell('C1')->setValue(0);
|
|
$sheet1->getCell('C2')->setValue('=0');
|
|
$sheet2->getCell('C3')->setValue(0);
|
|
$sheet2->getCell('C4')->setValue('=0');
|
|
$sheet1->getCell('D1')->setValue('=ISFORMULA(SheetOne!C1)');
|
|
$sheet1->getCell('D2')->setValue('=ISFORMULA(SheetOne!C2)');
|
|
$sheet1->getCell('E1')->setValue('=ISFORMULA(\'SheetOne\'!C1)');
|
|
$sheet1->getCell('E2')->setValue('=ISFORMULA(\'SheetOne\'!C2)');
|
|
$sheet1->getCell('F1')->setValue('=ISFORMULA(\'Sheet Two\'!C3)');
|
|
$sheet1->getCell('F2')->setValue('=ISFORMULA(\'Sheet Two\'!C4)');
|
|
self::assertFalse($sheet1->getCell('D1')->getCalculatedValue());
|
|
self::assertTrue($sheet1->getCell('D2')->getCalculatedValue());
|
|
self::assertFalse($sheet1->getCell('E1')->getCalculatedValue());
|
|
self::assertTrue($sheet1->getCell('E2')->getCalculatedValue());
|
|
self::assertFalse($sheet1->getCell('F1')->getCalculatedValue());
|
|
self::assertTrue($sheet1->getCell('F2')->getCalculatedValue());
|
|
|
|
$spreadsheet->addNamedRange(new NamedRange('range1f', $sheet1, '$C$1'));
|
|
$spreadsheet->addNamedRange(new NamedRange('range1t', $sheet1, '$C$2'));
|
|
$spreadsheet->addNamedRange(new NamedRange('range2f', $sheet2, '$C$3'));
|
|
$spreadsheet->addNamedRange(new NamedRange('range2t', $sheet2, '$C$4'));
|
|
$spreadsheet->addNamedRange(new NamedRange('range2ft', $sheet2, '$C$3:$C$4'));
|
|
$sheet1->getCell('G1')->setValue('=ISFORMULA(ABCDEFG)');
|
|
$sheet1->getCell('G3')->setValue('=ISFORMULA(range1f)');
|
|
$sheet1->getCell('G4')->setValue('=ISFORMULA(range1t)');
|
|
$sheet1->getCell('G5')->setValue('=ISFORMULA(range2f)');
|
|
$sheet1->getCell('G6')->setValue('=ISFORMULA(range2t)');
|
|
$sheet1->getCell('G7')->setValue('=ISFORMULA(range2ft)');
|
|
self::assertSame('#NAME?', $sheet1->getCell('G1')->getCalculatedValue());
|
|
self::assertFalse($sheet1->getCell('G3')->getCalculatedValue());
|
|
self::assertTrue($sheet1->getCell('G4')->getCalculatedValue());
|
|
self::assertFalse($sheet1->getCell('G5')->getCalculatedValue());
|
|
self::assertTrue($sheet1->getCell('G6')->getCalculatedValue());
|
|
self::assertFalse($sheet1->getCell('G7')->getCalculatedValue());
|
|
|
|
$sheet1->getCell('H1')->setValue('=ISFORMULA(C1:C2)');
|
|
$sheet1->getCell('H3')->setValue('=ISFORMULA(C2:C3)');
|
|
self::assertFalse($sheet1->getCell('H1')->getCalculatedValue());
|
|
self::assertTrue($sheet1->getCell('H3')->getCalculatedValue());
|
|
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
}
|