mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-09-02 13:41:21 +00:00
114 lines
4.5 KiB
PHP
114 lines
4.5 KiB
PHP
<?php
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Worksheet\Table;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class FormulaTest extends TestCase
|
|
{
|
|
public function testCellFormulaUpdateOnTableNameChange(): void
|
|
{
|
|
$reader = new Xlsx();
|
|
$filename = 'tests/data/Worksheet/Table/TableFormulae.xlsx';
|
|
$spreadsheet = $reader->load($filename);
|
|
$worksheet = $spreadsheet->getActiveSheet();
|
|
|
|
// Verify original formulae
|
|
// Row Formula
|
|
self::assertSame("=DeptSales[[#This Row],[Sales\u{a0}Amount]]*DeptSales[[#This Row],[% Commission]]", $worksheet->getCell('E2')->getValue());
|
|
// Totals Formula
|
|
self::assertSame('=SUBTOTAL(109,DeptSales[Commission Amount])', $worksheet->getCell('E8')->getValue());
|
|
|
|
$table = $worksheet->getTableCollection()[0];
|
|
if ($table === null) {
|
|
self::markTestSkipped('Unable to read table for testing.');
|
|
}
|
|
$table->setName('tblSalesByDepartment');
|
|
|
|
// Verify modified formulae
|
|
// Row Formula
|
|
self::assertSame("=tblSalesByDepartment[[#This Row],[Sales\u{a0}Amount]]*tblSalesByDepartment[[#This Row],[% Commission]]", $worksheet->getCell('E2')->getValue());
|
|
// Totals Formula
|
|
self::assertSame('=SUBTOTAL(109,tblSalesByDepartment[Commission Amount])', $worksheet->getCell('E8')->getValue());
|
|
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public function testNamedFormulaUpdateOnTableNameChange(): void
|
|
{
|
|
$reader = new Xlsx();
|
|
$filename = 'tests/data/Worksheet/Table/TableFormulae.xlsx';
|
|
$spreadsheet = $reader->load($filename);
|
|
|
|
$table = $spreadsheet->getActiveSheet()->getTableCollection()[0];
|
|
if ($table === null) {
|
|
self::markTestSkipped('Unable to read table for testing.');
|
|
}
|
|
$namedFormula = $spreadsheet->getNamedFormula('CommissionTotal');
|
|
if ($namedFormula === null) {
|
|
self::markTestSkipped('Unable to read named formula for testing.');
|
|
}
|
|
|
|
// Verify original formula
|
|
self::assertSame('SUBTOTAL(109,DeptSales[Commission Amount])', $namedFormula->getFormula());
|
|
|
|
$table->setName('tblSalesByDepartment');
|
|
// Verify modified formula
|
|
self::assertSame('SUBTOTAL(109,tblSalesByDepartment[Commission Amount])', $namedFormula->getFormula());
|
|
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public function testCellFormulaUpdateOnHeadingColumnChange(): void
|
|
{
|
|
$reader = new Xlsx();
|
|
$filename = 'tests/data/Worksheet/Table/TableFormulae.xlsx';
|
|
$spreadsheet = $reader->load($filename);
|
|
$worksheet = $spreadsheet->getActiveSheet();
|
|
|
|
// Verify original formulae
|
|
// Row Formula
|
|
self::assertSame("=DeptSales[[#This Row],[Sales\u{a0}Amount]]*DeptSales[[#This Row],[% Commission]]", $worksheet->getCell('E2')->getValue());
|
|
// Totals Formula
|
|
self::assertSame('=SUBTOTAL(109,DeptSales[Commission Amount])', $worksheet->getCell('E8')->getValue());
|
|
|
|
$worksheet->getCell('D1')->setValue('Commission %age');
|
|
$worksheet->getCell('E1')->setValue('Commission');
|
|
|
|
// Verify modified formulae
|
|
// Row Formula
|
|
self::assertSame("=DeptSales[[#This Row],[Sales\u{a0}Amount]]*DeptSales[[#This Row],[Commission %age]]", $worksheet->getCell('E2')->getValue());
|
|
// Totals Formula
|
|
self::assertSame('=SUBTOTAL(109,DeptSales[Commission])', $worksheet->getCell('E8')->getValue());
|
|
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
|
|
public function testNamedFormulaUpdateOnHeadingColumnChange(): void
|
|
{
|
|
$reader = new Xlsx();
|
|
$filename = 'tests/data/Worksheet/Table/TableFormulae.xlsx';
|
|
$spreadsheet = $reader->load($filename);
|
|
$worksheet = $spreadsheet->getActiveSheet();
|
|
|
|
$table = $spreadsheet->getActiveSheet()->getTableCollection()[0];
|
|
if ($table === null) {
|
|
self::markTestSkipped('Unable to read table for testing.');
|
|
}
|
|
$namedFormula = $spreadsheet->getNamedFormula('CommissionTotal');
|
|
if ($namedFormula === null) {
|
|
self::markTestSkipped('Unable to read named formula for testing.');
|
|
}
|
|
|
|
// Verify original formula
|
|
self::assertSame('SUBTOTAL(109,DeptSales[Commission Amount])', $namedFormula->getFormula());
|
|
|
|
$worksheet->getCell('E1')->setValue('Commission');
|
|
// Verify modified formula
|
|
self::assertSame('SUBTOTAL(109,DeptSales[Commission])', $namedFormula->getFormula());
|
|
|
|
$spreadsheet->disconnectWorksheets();
|
|
}
|
|
}
|