removeSheetByIndex(0); $availableWs = []; $worksheet = $xlsx->createSheet(); $worksheet->setTitle('Condensed A'); $worksheet->getCell('A1')->setValue("=SUM('Detailed A'!A1:A10)"); $worksheet->getCell('A2')->setValue(mt_rand(1, 30)); $availableWs[] = 'Condensed A'; $worksheet = $xlsx->createSheet(); $worksheet->setTitle('Condensed B'); $worksheet->getCell('A1')->setValue("=SUM('Detailed B'!A1:A10)"); $worksheet->getCell('A2')->setValue(mt_rand(1, 30)); $availableWs[] = 'Condensed B'; // at this point the value in worksheet 'Condensed B' cell A1 is // =SUM('Detailed B'!A1:A10) // worksheet in question is cloned and totals are attached $totalWs1 = clone $xlsx->getSheet($xlsx->getSheetCount() - 1); $totalWs1->setTitle('Condensed Total'); $xlsx->addSheet($totalWs1); $formula = '='; foreach ($availableWs as $ws) { $formula .= sprintf("+'%s'!A2", $ws); } $totalWs1->getCell('A1')->setValue("=SUM('Detailed Total'!A1:A10)"); $totalWs1->getCell('A2')->setValue($formula); $availableWs = []; $worksheet = $xlsx->createSheet(); $worksheet->setTitle('Detailed A'); for ($step = 1; $step <= 10; ++$step) { $worksheet->getCell("A{$step}")->setValue(mt_rand(1, 30)); } $availableWs[] = 'Detailed A'; $worksheet = $xlsx->createSheet(); $worksheet->setTitle('Detailed B'); for ($step = 1; $step <= 10; ++$step) { $worksheet->getCell("A{$step}")->setValue(mt_rand(1, 30)); } $availableWs[] = 'Detailed B'; $totalWs2 = clone $xlsx->getSheet($xlsx->getSheetCount() - 1); $totalWs2->setTitle('Detailed Total'); $xlsx->addSheet($totalWs2); for ($step = 1; $step <= 10; ++$step) { $formula = '='; foreach ($availableWs as $ws) { $formula .= sprintf("+'%s'!A%s", $ws, $step); } $totalWs2->getCell("A{$step}")->setValue($formula); } self::assertSame("=SUM('Detailed A'!A1:A10)", $xlsx->getSheetByName('Condensed A')?->getCell('A1')?->getValue()); self::assertSame("=SUM('Detailed B'!A1:A10)", $xlsx->getSheetByName('Condensed B')?->getCell('A1')?->getValue()); self::assertSame("=SUM('Detailed Total'!A1:A10)", $xlsx->getSheetByName('Condensed Total')?->getCell('A1')?->getValue()); self::assertSame("=+'Detailed A'!A1+'Detailed B'!A1", $xlsx->getSheetByName('Detailed Total')?->getCell('A1')?->getValue()); $xlsx->disconnectWorksheets(); } }