Symfony2,Doctrine,从数据库中获取数据来生成excel

我想从数据库中检索数据行,以导出Symfony中的Excel文件。 我无法遍历每一行,我只是得到结果的最后一个元素。 我猜测我在某个地方犯了一个错误,要么有正确的循环,要么循环不正确。 或者,也许我没有正确检索数据? 我只是习惯通过Doctrine检索数据,并在树枝模板输出循环,所以这一直困扰着我。 非常感谢。

$em = $this->getDoctrine()->getManager(); $query = $em->createQuery(' .......query ') ->setParameter('no', $no); $results = $query->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY); $excel = $this->get('phpexcel')->createPHPExcelObject(); $excel->getProperties()->setCreator('iStyle') ->setTitle('Inventory Report'); $i = 2; $excel->setActiveSheetIndex(0); $excel->getActiveSheet()->setTitle('Inventory. '.$no) ->setCellValue('A1', 'Report') ->mergeCells('A1:G1') ->setCellValue('A'.$i, 'No.') ->setCellValue('B'.$i, 'Color') ->setCellValue('C'.$i, 'Weight') ->setCellValue('D'.$i, 'SKU') ->setCellValue('E'.$i, 'Dimensions') ->setCellValue('F'.$i, 'Qty Available'); for($d = 0; $d < count($results); $d++) { $i = 3; $excel->getActiveSheet() ->setCellValue('A'.$i, $results[$d]['no']) ->setCellValue('B'.$i, $results[$d]['color']) ->setCellValue('C'.$i, $results[$d]['weight']) ->setCellValue('D'.$i, $results[$d]['sku']) ->setCellValue('E'.$i, $results[$d]['dimensions']) ->setCellValue('F'.$i, $results[$d]['qty']); $i++; } $writer = $this->get('phpexcel')->createWriter($excel, '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=invreport-'.$no.'.xls'); $response->headers->set('Pragma', 'public'); $response->headers->set('Cache-Control', 'maxage=1'); return $response; 

for循环中,您将$i明确设置$i 3然后递增$i++ 。 因此,你永远不会追加一个新的行,你只需要一遍又一遍地更新最后一行A3B3 etc ,留下最后一行来更新。

$i = 3; 跳出循环并放在for(..)调用之前。

 $i = 3; for($d = 0; $d < count($results); $d++) { $excel->getActiveSheet() ->setCellValue('A'.$i, $results[$d]['no']) ->setCellValue('B'.$i, $results[$d]['color']) ->setCellValue('C'.$i, $results[$d]['weight']) ->setCellValue('D'.$i, $results[$d]['sku']) ->setCellValue('E'.$i, $results[$d]['dimensions']) ->setCellValue('F'.$i, $results[$d]['qty']); $i++; } 
Interesting Posts