2016-08-27 21 views
2

我试图使用PHP和symfony将数组导出为XLS文件,如下面的代码所示。创建XLS文件后,我只能得到数组的最后一行,并将其显示在我的文件的第一行。看来“lignes”变量不会增加。我无法弄清楚什么是错,任何人都可以帮忙吗?使用php和symfony从数组创建Excel文件

foreach ($adresses as $ad){ 

      $phpExcelObject->setActiveSheetIndex(0)->setCellValue('A' . $lignes, $ad->getId()); 
      $phpExcelObject->setActiveSheetIndex(0)->setCellValue('E' . $lignes, $ad->getTypeVoie()); 
      $phpExcelObject->setActiveSheetIndex(0)->setCellValue('F' . $lignes, $ad->getVoie()); 
      $phpExcelObject->setActiveSheetIndex(0)->setCellValue('G' . $lignes, $ad->getTypeQuartier()); 
      $phpExcelObject->setActiveSheetIndex(0)->setCellValue('H' . $lignes, $ad->getQuartier()); 
      $phpExcelObject->setActiveSheetIndex(0)->setCellValue('I' . $lignes, $ad->getCodePostale()); 
      $phpExcelObject->setActiveSheetIndex(0)->setCellValue('K' . $lignes, $ad->getPays()); 
      $phpExcelObject->setActiveSheetIndex(0)->setCellValue('J' . $lignes, $ad->getVille()); 
      $lignes++; 

     } 
     $writer = $this->get('phpexcel')->createWriter($phpExcelObject, 'Excel2007'); 
     $writer->save($fichier->getWebPathOut()); 
+0

'$法分++'你的循环里面....这是行号,你永远不会改变它在 –

回答

1

我会尝试这样的:

$lignes = 1; 
    $phpExcelObject->setActiveSheetIndex(0); 
    foreach ($adresses as $ad){ 
      $phpExcelObject->getActiveSheet() 
      ->setCellValue('A' . $lignes, $ad->getId()) 
      ->setCellValue('E' . $lignes, $ad->getTypeVoie()) 
      ->setCellValue('F' . $lignes, $ad->getVoie()) 
      ->setCellValue('G' . $lignes, $ad->getTypeQuartier()) 
      ->setCellValue('H' . $lignes, $ad->getQuartier()) 
      ->setCellValue('I' . $lignes, $ad->getCodePostale()) 
      ->setCellValue('K' . $lignes, $ad->getPays()) 
      ->setCellValue('J' . $lignes, $ad->getVille()) 
      $lignes++; 

     } 
     $writer = $this->get('phpexcel')->createWriter($phpExcelObject, 'Excel2007'); 
     $writer->save($fichier->getWebPathOut()); 
+0

1开始'$ lignes' .... 0行不会在Excel –

+0

其实我的存在以2'$ lignes = 2'开始 – user2804064

2

的代码可以像下面。这是工作代码。希望你在这段代码中得到了答案。该功能使用php excel "phpoffice/phpexcel": "^1.8"

public function downloadAction(Request $request) 
{ 
    $phoneListId = $request->get('phonelist_id'); 

    $em = $this->getDoctrine()->getManager(); 
    $phoneList = $em->getRepository(PhoneList::class)->find($phoneListId); 

    $phoneNumbers = $phoneList->getPhoneNumbers(); 

    // ask the service for a Excel5 
    $phpExcelObject = $this->get('phpexcel')->createPHPExcelObject(); 

    $phpExcelObject->getProperties()->setCreator("liuggio") 
     ->setTitle($phoneList->getTitle()) 
     ->setSubject($phoneList->getTitle()); 

    $sheet = $phpExcelObject->setActiveSheetIndex(0); 

    $sheet->setCellValue('A1', 'Name'); 
    $sheet->setCellValue('B1', 'Number'); 
    $sheet->setCellValue('C1', 'Phone Number'); 
    $sheet->setCellValue('D1', 'Designation'); 
    $sheet->setCellValue('E1', 'Office'); 

    $counter = 2; 
    foreach ($phoneNumbers as $phoneNumber) { 
     $sheet->setCellValue('A' . $counter, $phoneNumber->getName()); 
     $sheet->setCellValue('B' . $counter, $phoneNumber->getNumber()); 
     $sheet->setCellValue('C' . $counter, $phoneNumber->getPhoneNumber()); 
     $sheet->setCellValue('D' . $counter, $phoneNumber->getDesignation()); 
     $sheet->setCellValue('E' . $counter, $phoneNumber->getOffice()); 
     $counter++; 
    } 

    $phpExcelObject->getActiveSheet()->setTitle($phoneList->getTitle()); 

    // Set active sheet index to the first sheet, so Excel opens this as the first sheet 
    $phpExcelObject->setActiveSheetIndex(0); 

    // create the writer 
    $writer = $this->get('phpexcel')->createWriter($phpExcelObject, 'Excel5'); 
    // create the response 
    $response = $this->get('phpexcel')->createStreamedResponse($writer); 
    // adding headers 
    $dispositionHeader = $response->headers->makeDisposition(
     ResponseHeaderBag::DISPOSITION_ATTACHMENT, 
     $phoneList->getTitle() . '.xls' 
    ); 
    $response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8'); 
    $response->headers->set('Pragma', 'public'); 
    $response->headers->set('Cache-Control', 'maxage=1'); 
    $response->headers->set('Content-Disposition', $dispositionHeader); 

    return $response; 
}