PHP - Insertar Datos Dinamicamente con PhpExel

 
Vista:
sin imagen de perfil

Insertar Datos Dinamicamente con PhpExel

Publicado por ALUCARD (1 intervención) el 02/01/2018 17:54:52
Hola tengo un problema el cual consiste en crear un reporte con la librería PhpExel, anteriormente el código ya funcionaba bien ya que solo mostraba el reporte en tablas y gráficas en el navegador pero ahora requiero descargarlo en un documento xlsx pero al querer que insertar los datos dentro de un ciclo foreach que ya usaba para crear la tabla de php, al mismo tiempo capturara y enviara al doc xlsx pero no lo hace, me resulta extraño por que afuera con valores fijos, como un array ya establecido lo hace bien.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
error_reporting(0);
	/** Include PHPExcel */
require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
		$indicador = isset($_POST['Indicador']) ? $_POST['Indicador'] : null;
		$tipo = isset($_POST['Tipo']) ? $_POST['Tipo'] : null;
		$anio = isset($_POST['Anio']) ? $_POST['Anio'] :null;
		$clave = isset($_POST['Clave']) ? $_POST['Clave'] :null;
		$semana2 = isset($_POST['Semana2']) ? $_POST['Semana2'] :null;
		$semana = isset($_POST['Semana']) ? $_POST['Semana'] :null;
		$zona2 = isset($_POST['Zona2']) ? $_POST['Zona2'] :null;
		$zona = isset($_POST['Zona']) ? $_POST['Zona'] :null;
		$usuario = Session::get('ses_usuario');
        $user = $usuario->USUARIO;
        $this->modelGrafFenSem = new ModelGrafica();
		$this->modelGrafFenSem->setIndicador($indicador);
		$this->modelGrafFenSem->setTipo($tipo);
		$this->modelGrafFenSem->setAnio($anio);
		$this->modelGrafFenSem->setClave($clave);
		$this->modelGrafFenSem->setSemanaFin($semana2);
		$this->modelGrafFenSem->setSemanaIni($semana);
		$this->modelGrafFenSem->setZonaFin($zona2);
		$this->modelGrafFenSem->setZonaIni($zona);
		$this->modelGrafFenSem->setUser($user);
        $tipos = $this->modelGrafFenSem->regresaTablaGrafica();
 
		//Empieza documento exel
		error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('America/Mexico_City');
 
if (PHP_SAPI == 'cli')
	die('Este archivo solo se puede ver desde un navegador web');
 
 
 
 
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
 
// Set document properties
$objPHPExcel->getProperties()->setCreator("Grupo Empresarial MRB")
							 ->setLastModifiedBy("Grupo Empresarial MRB")
							 ->setTitle("MONITOREO-SEGUIMIENTO")
							 ->setSubject("MONITOREO-SEGUIMIENTO")
							 ->setDescription("Documento Generado por la pagina 'http://gmrbintranet.grupomrb.local:8989/WebSAPDES/'")
							 ->setKeywords("office 2007 openxml php")
							 ->setCategory("Test result file");
 
		$cs=$semana;
		$armador=array();
		$armador2=array();
		$armadorSemanas=array();
		$kami='';
		$comprobadorV='';
        $exel=array(1 =>'ZONA');
		$exel2=array();
        $tabla ='';
		$vzona = '<tr align="rigth"><th>Semana</th>';
		$Nsemana='';
		$i=3;
		 // $exel=array($i =>'ALUCARD');
		 $col='A';
		 $row=1;
		$comprobadorV=gettype($tipos);
        if (isset($tipos->SEND_TREGFEN->item)){
            $arraytipos = array();
            $arraytipos = $tipos->SEND_TREGFEN->item;
			$comprobadorV=gettype($arraytipos);
            $tam = sizeof($arraytipos);
            if ($tam > 1) {
                 foreach($arraytipos as $value){
                   $valorZona = $value->ZONA;
				   $valorSemana = (int)$value->SEMANIO;
				   $valorCantidad = $value->CANTIDAD;
				   // print_r($valorZona);
				   array_push($exel,$valorZona);
				   // Se crea el encabezado de semana con zona para la tabla.
				   array_push($armador2,$valorCantidad);
				   $armador[$valorSemana]=$armador2;
				   $objeto=(object)['A3' =>$valorZona];
				   //Esto no lo hace 
				   // $objPHPExcel->getActiveSheet()
            // ->setCellValue('A'.(String)($i+1),'algo');
			// print_r($valorZona);
 
 
			// print_r($exel);
				   $confZ=strpos($vzona,$valorZona);
				   if($confZ === false){
					   $vzona = $vzona.'<th align="rigth">'.$valorZona.'</th>';
				   }
				   // End de encabezado
				   array_push($exel2,$value->ZONA);
				   array_push($exel2,$value->SEMANIO);
				   }
 
 
                }
			else
			{
				$valorZona = $arraytipos->ZONA;
				$valorSemana = $arraytipos->SEMANIO;
                $valorCantidad = $arraytipos->CANTIDAD;
				//Se crea el encabezado de las zonas para la tabla.
				if($valorZona!=$vzona){
					   $vzona = $vzona.'<th>'.$valorZona.'</th>';
				   }
				   $objPHPExcel->getActiveSheet()
            ->setCellValue('A'.(String)($i+1),'algo');
				// Fin del la creacion  del encabezado
				$kami=$valorCantidad;
			}
        }
		//Esto si lo hace
		$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A3',$exel[1])
            ->setCellValue('B3','KAMI')
            ->setCellValue('C3','KAMI');
 
		$objPHPExcel->getActiveSheet()->setTitle('Prueba');
 
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
 
 
// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="MONITOREO-SEGUIMIENTO.xlsx"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
 
// If you're serving to IE over SSL, then the following may be needed
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, 'Excel2007');
$objWriter->save('php://output');
exit;
Incluso hice pruebas con la siguiente linea ponerla dentro del ciclo y después fuera, dentro no lo realiza y fuera si, confirme que si entrara al ciclo(lo hace, entra al ciclo) pero no ejecuta
1
2
3
4
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A3',$exel[1])
            ->setCellValue('B3','KAMI')
            ->setCellValue('C3','KAMI');
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder