symfony PHPExel-excel报告生成过程中数据填充不正确

c9x0cxw0  于 2023-03-19  发布在  PHP
关注(0)|答案(3)|浏览(132)

我正在Symfony 2.1.PHPEcel版本为1.8.0的项目中工作。我使用Doctrine从Db中检索数据,如果需要的话进行过滤。

$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();

这是我的查询,通过给变量2014-12-1赋$dateLow,给变量2014-12-8赋$dateHigh,查询返回122行,数据库中有579行,过滤后返回的数据是正确的,我可以用下面的代码插入到Excel中。

$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', 'application/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;

在进入for循环之前,变量$count的值为122。在生成的excel中有579行(数据库中可用的整个数据),而不是过滤后获得的122行。Excel的E列还显示值579,而不是122。for循环也执行了579次,而不是122次。在phpExcel中插入数据时,数组$attendanceResult发生了变化。
我尝试将$attendanceResult的内容保存到另一个数组中,并使用该数组将数据插入到Excel中。同样的问题也存在。请帮助我,因为我找不到代码的任何错误。提前感谢

nqwrtyyt

nqwrtyyt1#

“数据过滤正确,我得到了过滤后的数组,但数组在导出到phpexcel时发生了变化-”
在调试或var_dump之前不要假设它已经被过滤了。假设对你和我们都没有帮助,你所说的是不可能的。PS:帖子所有者已经回答了此问题。

af7jpaap

af7jpaap2#

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

尝试上面的代码到错误的人口行,也改变你的excel格式为. xlsx.你可以用phpExcel.

tag5nh1u

tag5nh1u3#

对于您和那些正在寻找Excel导出在PHP中实现

你可以使用它推荐的最佳替代方案-- Php电子表格(Phpspreadsheet documentation

相关问题