dynamic formula in a PHP variable not writing to a cell

Topics: Developer Forum
Jun 30, 2010 at 10:31 PM
Edited Jun 30, 2010 at 11:46 PM

Hi;

PHPExcel ver. 1.7.3c

Excel5 format.

 

I am building dynamic cell formulas and holding them in a PHP variable. I then want to write the formula out to a cell using setSetCellValue. When I trace in PHP I can see the formula  building correctly. I can even copy the resulting formula into a open Excel spreadsheet and the formula works. However, the 'generated' spreadsheet contains nothing in the target cell when I open the worksheet after running my php script.

I have quoted the formula and that only creates a string in the cell, it does no calculation.

Is there a 'method' for translating php variables in a valid formula?

Also, I first tried placing the formula in an array cell (along with some other cell data) and writing the array out to an empty are in Excel spreadsheet. The data portion of the array writes correctly, but nothing in the cell that is supposed to contain the formula.

Is there a more efficient way of doing this?

Here is a sample of my code:

    function loadArray($xl, $arr, $row) {

        $xl                                        = (object) $xl;
        $areaFormula                            = '=IF(+((A16*CEILING(B16,0.5)*CEILING(D16,0.5))/144)<=A16, A16, +((A16*CEILING(B16,0.5)*CEILING(D16,0.5))/144))';

        $qCol                                    = 'A';
        $wCol                                    = 'B';
        $hCol                                    = 'D';
        $fCol                                    = 'I';
        $count                                    = count($arr);

        $ret                                    = array();

        for ($i = 0; $i < $count; $i++) {
            $dRow                                = $row + $i;
            $fCell                                = $fCol . $dRow;
            $area                                = '\'=IF(+((' .
                                                  $qCol . $dRow . '*CEILING(' .
                                                  $wCol . $dRow . ',0.5)*CEILING(' .
                                                  $hCol . $dRow . ',0.5))/144)<=' .
                                                  $qCol . $dRow . ', ' .
                                                  $qCol . $dRow . ', +((' .
                                                  $qCol . $dRow . '*CEILING(' .
                                                  $wCol . $dRow . ',0.5)*CEILING(' .
                                                  $hCol . $dRow . ',0.5))/144))\'';

            $ret[$i][0]                            = $arr[$i]->compQty;
            $ret[$i][1]                            = $arr[$i]->compWidth;
            $ret[$i][2]                            = 'x';
            $ret[$i][3]                            = $arr[$i]->compHeight;
            $ret[$i][4]                            = $arr[$i]->doorHingeCode;
            $ret[$i][5]                            = $arr[$i]->cabCode;
            $ret[$i][6]                            = '';
            $ret[$i][7]                            = $arr[$i]->lineNo;

//            $xl->getActiveSheet()->setCellValue($fCell, $area);
//            $ret[$i][8]                            = $area;

            if ($arr[$i]->connectToFlag) {
                $ret[$i][0]                        = '';
                $ret[$i][1]                        = '';
                $ret[$i][2]                        = '';
                $ret[$i][3]                        = '';
                $ret[$i][4]                        = '';
                $ret[$i][5]                        = '^ Connect Together';
                $ret[$i][6]                        = '';
                $ret[$i][7]                        = '';
//                $ret[$i][8]                        = '';
//                $xl->getActiveSheet()->setCellValue($fCell, '');
            }
        }

        return $ret;
}

 

By the way, the formula DOES work in Excel2007 format.