examples composer php mysql symfony phpexcel phpexcelreader

composer - phpexcel php 7



PHPExcel-Llenado de datos incorrectos durante la generaciĆ³n de informes de Excel (2)

Estoy trabajando en un proyecto en Symfony 2.1.PHPExcel versión es 1.8.0. Uso Doctrine para recuperar los datos de Db y filtrar si es necesario.

$em = $this->getDoctrine()->getManager(); $guardquery = $em->createQueryBuilder() ->select(''g.attendancePopupTime'', ''d.atmName'', ''d.region'', ''d.zone'', ''d.state'') ->from(''ATMMonitorAPIBundle:GuardMonitor'', ''g'') ->innerJoin(''ATMMonitorAPIBundle:DeviceAtmInfo'', ''d'', Join::WITH, ''d.deviceId = g.deviceId''); if ($userZones[0][''userZones''] != ''0'') { $guardquery->innerJoin(''ATMMonitorAPIBundle:RegisteredDevices'', ''r'', Join::WITH, ''r.deviceId = g.deviceId'') ->where(''r.deviceZone IN (:devicezone)'') ->setParameter(''devicezone'', $zone_array); } if (isset($dateLow)) { $guardquery->andWhere(''g.attendancePopupTime BETWEEN :date_low and :date_high'') ->setParameter(''date_low'', $dateLow) ->setParameter(''date_high'', $dateHigh); } $finalAttendanceQuery = $guardquery->getQuery(); $attendanceResult = $finalAttendanceQuery->getArrayResult();

Esta es mi consulta y al dar variables como 2014-12-1 como $ dateLow y 2014-12-8 como $ dateHigh, la consulta devuelve 122 filas. Hay 579 filas en la base de datos. Los datos devueltos después del filtrado son correctos y puedo insertarlos en Excel usando el siguiente código.

$phpExcelObject = $this->get(''phpexcel'')->createPHPExcelObject(); $phpExcelObject->getProperties()->setCreator("") ->setLastModifiedBy("Administrator") ->setTitle("ATTENDANCE DETAILS XLSX") ->setSubject("ATTENDANCE DETAILS XLSX") ->setDescription("EXCEL document for Attendance Details"); $phpExcelObject->setActiveSheetIndex(0); $phpExcelObject->getActiveSheet()->setTitle(''GUARD_ATTENDANCE - DETAILS''); $phpExcelObject->getActiveSheet() ->SetCellValue(''A3'', "STATE") ->SetCellValue(''B3'', "ZONE") ->SetCellValue(''C3'', "REGION") ->SetCellValue(''D3'', "DATE") ->SetCellValue(''A1'', "GUARD ATTENDANCE RECORDS"); $count = count($attendanceResult); $rowCount = 4; for ($i = 0; $i < $count; $i++) { $phpExcelObject->getActiveSheet()->SetCellValue(''A'' . $rowCount, $attendanceResult[$i][''state'']); $phpExcelObject->getActiveSheet()->SetCellValue(''B'' . $rowCount, $attendanceResult[$i][''zone'']); $phpExcelObject->getActiveSheet()->SetCellValue(''C'' . $rowCount, $attendanceResult[$i][''region'']); if ($attendanceResult[$i][''attendancePopupTime''] instanceof /DateTime) { $attendanceDate = $attendanceResult[$i][''attendancePopupTime'']->format(''d-m-Y''); } $phpExcelObject->getActiveSheet()->SetCellValue(''D'' . $rowCount, $punchTime); $phpExcelObject->getActiveSheet()->SetCellValue(''E'' . $rowCount, count($attendanceResult)); $rowCount++ } $writer = $this->get(''phpexcel'')->createWriter($phpExcelObject, ''Excel5''); $response = $this->get(''phpexcel'')->createStreamedResponse($writer); $response->headers->set(''Content-Type'', ''text/vnd.ms-excel; charset=utf-8''); $response->headers->set(''Content-Disposition'', ''attachment;filename=AttendanceDetails.xls''); $response->headers->set(''Pragma'', ''public''); $response->headers->set(''Cache-Control'', ''maxage=1''); return $response;

La variable $ count tiene el valor 122 antes de ingresar al bucle for. En el Excel generado hay 579 filas (datos completos disponibles en DB) de datos en lugar de 122 filas obtenidas después de la filtración. La columna E de Excel también muestra los valores 579 en lugar de 122. El bucle for también se ejecuta 579 veces en lugar de 122 veces. De alguna manera, la matriz $ attendResult cambia al insertar datos en phpExcel.

Intenté guardar el contenido de $ attendResult en otra matriz y usar esa matriz para insertar datos en el Excel. El mismo problema existe allí también. Por favor, ayuda, ya que no pude encontrar nada malo con el código. Gracias de antemano


"Los datos se filtran correctamente y obtuve la matriz filtrada, pero la matriz cambia cuando se exporta a phpexcel -"

No asuma que está correctamente filtrado hasta que lo depure o var_dump. Hacer suposiciones no nos ayudará a usted ni a nosotros, es simplemente imposible lo que está diciendo. PD: Esta pregunta ya ha sido respondida por el propietario del post.


$phpExcelObject->getActiveSheet()->setCellValueExplicit(''A''.$row_count,$row[''Value''], PHPExcel_Cell_DataType::TYPE_STRING);

Intente el código anterior en la fila de población incorrecta y también cambie su formato de Excel a .xlsx. Puedes hacerlo usando phpExcel.