0

I have some data which I am trying to export in an excel sheet with help of PHP, data is dynamic so I am facing difficulties while exporting them. I have tried both in PHPExcel (which is deprecated) and in PHPSpreadsheet too. I have tried lots of solutions given in the community but no help! How to print data dynamically in excel using PHP?

Data needs to print from column number = 36 (AK) and Row = 2

Data that needs to export:

    MongoDB\Model\BSONDocument Object
(
    [storage:ArrayObject:private] => Array
        (
           
            [dd1] => PWC>Yes,Deloitte>Yes,Media Type>Category A,Coverage Type>Quote,Service Line>TAX,Score>5
            [dd2] => Service Line>Personal tax
        )

) 

though [dd1] contains labels and values too, like PWC[this is lable] >Yes [this is value], that's why I explode label and value separately. Also, I have printed the labels in the first row already that's why I explode the value of the below code and also made a check if ($temp[0] == $labels[$i]) then only print value.

Completed Code:

   $cols = 36;
    for ($i = 0; $i < count($labels); $i++) {

        if ($result["qualification"]["dd1"] != "") {

            $found = false;
            for ($j = 0; $j < count($dd1); $j++) {
                $temp = explode(">", $dd1[$j]);
                 
 //need to check the weather labels of the header and these labels are the same? then only print
                if ($temp[0] == $labels[$i]) {
                    $name = explode(">", $dd1[$j]); 
                    $sheet->setCellValueByColumnAndRow($cols+1, $j+1, $name[1]);
                    $found = true;
                    break;
                }
            }
            if (!$found)
                $sheet->setCellValueByColumnAndRow($cols+1, $j+1 , "");

        } else
            $sheet->setCellValueByColumnAndRow($cols+1 , $j+1 , "");


        if ($result["qualification"]["dd2"] != "") {
            $found = false;
            for ($j = 0; $j < count($dd2); $j++) {
                $temp = explode(">", $dd2[$j]);
                if ($temp[0] == $labels[$i]) {
                    $name = explode(">", $dd2[$j]); 

                    $sheet->setCellValueByColumnAndRow( $cols, $j + 2, $name[1]  );
                    $found = true;
                    break;
                }
            }
            if (!$found)
                $sheet->setCellValueByColumnAndRow($cols, $j+1 , "");

        } else {
            $sheet->setCellValueByColumnAndRow($cols , $j+1 , "");
        }
        $cols = $cols + 2;
    }

I have tried lots of methods but no help but I made something in the HTML table which is working fine, unfortunately, I do not need an HTML table to excel because it has a lot of format issues and cons.

for reference only- Here is the same working snippet in HTML Table:

     $inn_table = "";
    if($result['qualification']['dd1']!="") {
            $dd1 = explode(",",$result['qualification']['dd1']);
        }
        if($result['qualification']['dd2']!=""){
            $dd2 = explode(",",$result['qualification']['dd2']);
        }

        for($i=0;$i<count($labels);$i++) {
            if($result['qualification']['dd1']!="") {
                $found=false;
                for($j=0;$j<count($dd1);$j++) {
                    $temp = explode(">",$dd1[$j]);


                    if($temp[0]==$labels[$i]) {
                        $name = explode(">",$dd1[$j]);
                        $inn_table .= '<td>'.$name[1].'</td>';
                        $found=true;
                        break;
                    }
                }
                if(!$found)
                    $inn_table .= "<td>&nbsp;</td>";
            }
            else
                $inn_table .= "<td>&nbsp;</td>";
            if($result['qualification']['dd2']!="") {
                $found=false;
                // echo '<pre>ass';print_r($dd2);
                for($j=0;$j<count($dd2);$j++) {
                    $temp = explode(">",$dd2[$j]);
                    if($temp[0]==$labels[$i]) {
                        $name = explode(">",$dd2[$j]);
                        $inn_table .= '<td>'.$name[1].'</td>';
                        $found=true;
                        break;
                    }
                }
                if(!$found)
                    $inn_table .= '<td>&nbsp;</td>';
            }
            else{
                //if(count($dd2Array)>0){
                    $inn_table .= '<td>&nbsp;</td>';
                //}
            }
        } //end of for($i=0;$i<count($labels);$i++)



    echo $inn_table;

    echo "</tr>"; 
Utsav Upadhyay
  • 415
  • 6
  • 21

0 Answers0