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


Symfony2, Doctrine, getting data from database to generate 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设置为3,然后将其递增为$i++。因此,您永远不会添加新行,您只是一遍又一遍地更新最后一行A3, B3, 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++;
}