PHPExcel Report with subtotal and total

0

It happens that I execute this query to export to Excel the information:

SELECT IFNULL(s.id_servicio,'Total') AS id_servicio,
    IFNULL(s.fecha_servicio,'General') AS fecha_servicio,
    c.nombre_conductor,c.apellido_conductor,
    d.nombre_distrito,u.nombre_urbanizacion,
    SUM(s.precio) AS precio,
    ds.nombre_tipo
FROM servicios s 
    INNER JOIN distrito d ON s.id_distrito = d.id_distrito 
    INNER JOIN urbanizacion u ON s.id_urbanizacion = u.id_urbanizacion
    INNER JOIN conductor c ON s.id_conductor = c.id_conductor 
    INNER JOIN detalle_servicio ds ON s.tipo_servicio = ds.tipo_servicio 
WHERE c.id_conductor = $i_conductor AND s.fecha_servicio BETWEEN 
'$i_fecha_inicio_format2' AND '$i_fecha_fin_format2'
GROUP BY s.fecha_servicio,s.id_servicio ASC WITH ROLLUP

The result

Then I would like the part that says, fecha,destino , type to be empty.

How can I do it? I am using as report engine PHPExcel .

Here is the PHPExcel code:

        /** Incluye PHPExcel */
        require_once dirname(__FILE__) . '/Classes/PHPExcel.php';
        // Crear nuevo objeto PHPExcel
        $objPHPExcel = new PHPExcel();

        // Propiedades del documento
        $objPHPExcel->getProperties()->setCreator("Reporte")
                                     ->setLastModifiedBy("Reporte")
                                     ->setTitle("Reporte de Ingresos por Conductor")
                                     ->setSubject("Reporte de Ingresos por Conductor")
                                     ->setDescription("Reporte de Ingresos por Conductor detalladp.")
                                     ->setKeywords("office 2013 openxml php")
                                     ->setCategory("Reporte de Ingresos por Conductor");



        // Combino las celdas desde A1 hasta E1
        $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:F1');

        $objPHPExcel->setActiveSheetIndex(0)
                    ->setCellValue('A1', 'REPORTE DE INGRESOS POR CONDUCTOR')
                    ->setCellValue('A2', 'ID SERVICIO')
                    ->setCellValue('B2', 'FECHA')
                    ->setCellValue('C2', 'CONDUCTOR')
                    ->setCellValue('D2', 'DESTINO')
                    ->setCellValue('E2', 'TIPO')
                    ->setCellValue('F2', 'PRECIO');

        // Fuente de la primera fila en negrita
        $boldArray = array('font' => array('bold' => true,),'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER));

        $objPHPExcel->getActiveSheet()->getStyle('A1:F2')->applyFromArray($boldArray);      



        //Ancho de las columnas
        $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(30);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(25);  
        $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(10);
        $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(20);          

        /*Extraer datos de MYSQL*/
            # conectare la base de datos



                $i_conductor = $_POST['i_conductor'];
                $i_fecha_inicio = $_POST['i_fecha_inicio'];
                $i_fecha_inicio_format = strtotime($i_fecha_inicio);
                $i_fecha_inicio_format2 = date('Y-m-d',$i_fecha_inicio_format);

                $i_fecha_fin = $_POST['i_fecha_fin'];
                $i_fecha_fin_format = strtotime($i_fecha_fin);
                $i_fecha_fin_format2 = date('Y-m-d',$i_fecha_fin_format);

            include 'abrir_conexion.php';       

            $sql="SELECT IFNULL(s.id_servicio,' ') AS id_servicio,s.fecha_servicio,c.nombre_conductor,c.apellido_conductor,d.nombre_distrito,u.nombre_urbanizacion,SUM(s.precio) AS precio,ds.nombre_tipo FROM servicios s 
                INNER JOIN distrito d ON s.id_distrito = d.id_distrito 
                INNER JOIN urbanizacion u ON s.id_urbanizacion = u.id_urbanizacion
                INNER JOIN conductor c ON s.id_conductor = c.id_conductor 
                INNER JOIN detalle_servicio ds ON s.tipo_servicio = ds.tipo_servicio WHERE c.id_conductor = $i_conductor AND s.fecha_servicio BETWEEN '$i_fecha_inicio_format2' AND '$i_fecha_fin_format2' GROUP BY s.fecha_servicio,s.id_servicio ASC WITH ROLLUP";

            $query=mysql_query($sql);
            $cel=3;//Numero de fila donde empezara a crear  el reporte
            while ($row=mysql_fetch_array($query)){

                    $id_servicio = $row["id_servicio"];
                    $fecha = $row["fecha_servicio"];
                    $fecha_format = strtotime($fecha);
                    $fecha_format2 = date('d-m-Y',$fecha_format);
                    $conductor = $row["nombre_conductor"]. " " .$row["apellido_conductor"];
                    $destino = $row["nombre_distrito"]. "-" .$row["nombre_urbanizacion"];
                    $tipo = $row["nombre_tipo"];
                    $precio = $row["precio"];


                    $a="A".$cel;
                    $b="B".$cel;
                    $c="C".$cel;
                    $d="D".$cel;
                    $e="E".$cel;
                    $f="F".$cel;
                    // Agregar datos
                    $objPHPExcel->setActiveSheetIndex(0)
                    ->setCellValue($a, $id_servicio)
                    ->setCellValue($b, $fecha_format2)
                    ->setCellValue($c, $conductor)
                    ->setCellValue($d, $destino)
                    ->setCellValue($e, $tipo)
                    ->setCellValue($f, $precio);

            $cel+=1;
            }




        /*Fin extracion de datos MYSQL*/


        $rango="A2:$f";
        $styleArray = array('font' => array( 'name' => 'Calibri','size' => 10),
        'borders'=>array('allborders'=>array('style'=> PHPExcel_Style_Border::BORDER_THIN,'color'=>array('argb' => 'FFF')))
        );
        $objPHPExcel->getActiveSheet()->getStyle($rango)->applyFromArray($styleArray);
        // Cambiar el nombre de hoja de cálculo
        $objPHPExcel->getActiveSheet()->setTitle('Reporte');


        // Establecer índice de hoja activa a la primera hoja , por lo que Excel abre esto como la primera hoja
        $objPHPExcel->setActiveSheetIndex(0);


        // Redirigir la salida al navegador web de un cliente ( Excel5 )
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="Reporte Ingresos por Conductor.xls"');
        header('Cache-Control: max-age=0');
        // Si usted está sirviendo a IE 9 , a continuación, puede ser necesaria la siguiente
        header('Cache-Control: max-age=1');

        // Si usted está sirviendo a IE a través de SSL , a continuación, puede ser necesaria la siguiente
        header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
        header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
        header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
        header ('Pragma: public'); // HTTP/1.0

        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        exit;
    
asked by Jhorvy 12.01.2018 в 06:25
source

1 answer

-1

Here is the code:

            /** Incluye PHPExcel */
            require_once dirname(__FILE__) . '/Classes/PHPExcel.php';
            // Crear nuevo objeto PHPExcel
            $objPHPExcel = new PHPExcel();

            // Propiedades del documento
            $objPHPExcel->getProperties()->setCreator("Reporte")
                                         ->setLastModifiedBy("Reporte")
                                         ->setTitle("Reporte de Ingresos por Conductor")
                                         ->setSubject("Reporte de Ingresos por Conductor")
                                         ->setDescription("Reporte de Ingresos por Conductor detalladp.")
                                         ->setKeywords("office 2013 openxml php")
                                         ->setCategory("Reporte de Ingresos por Conductor");



            // Combino las celdas desde A1 hasta E1
            $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:F1');

            $objPHPExcel->setActiveSheetIndex(0)
                        ->setCellValue('A1', 'REPORTE DE INGRESOS POR CONDUCTOR')
                        ->setCellValue('A2', 'ID SERVICIO')
                        ->setCellValue('B2', 'FECHA')
                        ->setCellValue('C2', 'CONDUCTOR')
                        ->setCellValue('D2', 'DESTINO')
                        ->setCellValue('E2', 'TIPO')
                        ->setCellValue('F2', 'PRECIO');

            // Fuente de la primera fila en negrita
            $boldArray = array('font' => array('bold' => true,),'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER));

            $objPHPExcel->getActiveSheet()->getStyle('A1:F2')->applyFromArray($boldArray);      



            //Ancho de las columnas
            $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);  
            $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);  
            $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(30);  
            $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(25);  
            $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(10);
            $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(20);          

            /*Extraer datos de MYSQL*/
                # conectare la base de datos



                    $i_conductor = $_POST['i_conductor'];
                    $i_fecha_inicio = $_POST['i_fecha_inicio'];
                    $i_fecha_inicio_format = strtotime($i_fecha_inicio);
                    $i_fecha_inicio_format2 = date('Y-m-d',$i_fecha_inicio_format);

                    $i_fecha_fin = $_POST['i_fecha_fin'];
                    $i_fecha_fin_format = strtotime($i_fecha_fin);
                    $i_fecha_fin_format2 = date('Y-m-d',$i_fecha_fin_format);

                include 'abrir_conexion.php';       

                $sql="SELECT IFNULL(s.id_servicio,' ') AS id_servicio,s.fecha_servicio,c.nombre_conductor,c.apellido_conductor,d.nombre_distrito,u.nombre_urbanizacion,SUM(s.precio) AS precio,ds.nombre_tipo FROM servicios s 
                    INNER JOIN distrito d ON s.id_distrito = d.id_distrito 
                    INNER JOIN urbanizacion u ON s.id_urbanizacion = u.id_urbanizacion
                    INNER JOIN conductor c ON s.id_conductor = c.id_conductor 
                    INNER JOIN detalle_servicio ds ON s.tipo_servicio = ds.tipo_servicio WHERE c.id_conductor = $i_conductor AND s.fecha_servicio BETWEEN '$i_fecha_inicio_format2' AND '$i_fecha_fin_format2' GROUP BY s.fecha_servicio,s.id_servicio ASC WITH ROLLUP";

                $query=mysql_query($sql);
                $cel=3;//Numero de fila donde empezara a crear  el reporte
                while ($row=mysql_fetch_array($query)){

                        $id_servicio = $row["id_servicio"];
                        $fecha = $row["fecha_servicio"];
                        $fecha_format = strtotime($fecha);
                        $fecha_format2 = date('d-m-Y',$fecha_format);
                        $conductor = $row["nombre_conductor"]. " " .$row["apellido_conductor"];
                        $destino = $row["nombre_distrito"]. "-" .$row["nombre_urbanizacion"];
                        $tipo = $row["nombre_tipo"];
                        $precio = $row["precio"];


                        $a="A".$cel;
                        $b="B".$cel;
                        $c="C".$cel;
                        $d="D".$cel;
                        $e="E".$cel;
                        $f="F".$cel;
                        // Agregar datos
                        $objPHPExcel->setActiveSheetIndex(0)
                        ->setCellValue($a, $id_servicio)
                        ->setCellValue($b, $fecha_format2)
                        ->setCellValue($c, $conductor)
                        ->setCellValue($d, $destino)
                        ->setCellValue($e, $tipo)
                        ->setCellValue($f, $precio);

                $cel+=1;
                }




            /*Fin extracion de datos MYSQL*/


            $rango="A2:$f";
            $styleArray = array('font' => array( 'name' => 'Calibri','size' => 10),
            'borders'=>array('allborders'=>array('style'=> PHPExcel_Style_Border::BORDER_THIN,'color'=>array('argb' => 'FFF')))
            );
            $objPHPExcel->getActiveSheet()->getStyle($rango)->applyFromArray($styleArray);
            // Cambiar el nombre de hoja de cálculo
            $objPHPExcel->getActiveSheet()->setTitle('Reporte');


            // Establecer índice de hoja activa a la primera hoja , por lo que Excel abre esto como la primera hoja
            $objPHPExcel->setActiveSheetIndex(0);


            // Redirigir la salida al navegador web de un cliente ( Excel5 )
            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename="Reporte Ingresos por Conductor.xls"');
            header('Cache-Control: max-age=0');
            // Si usted está sirviendo a IE 9 , a continuación, puede ser necesaria la siguiente
            header('Cache-Control: max-age=1');

            // Si usted está sirviendo a IE a través de SSL , a continuación, puede ser necesaria la siguiente
            header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
            header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
            header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
            header ('Pragma: public'); // HTTP/1.0

            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
            $objWriter->save('php://output');
            exit;
    
answered by 12.01.2018 в 21:29