2013-03-06 2 views
0

컨트롤러에서 데이터를 가져 오기 위해 rabbitmq 큐를 사용하고 소비자 서비스가 데이터를 처리하고 php-excel을 사용하여 Excel 시트를 생성합니다.데이터 덮어 쓰기 rabbitmq excel

제가 직면 한 문제는 하나의 소비자 만 실행하면 데이터가 Excel 시트에서 덮어 쓰여지고 있다는 것입니다. 여러 소비자를 운영하는 경우 대부분 문제가 해결됩니다.

나는 symfony2에 대해 rabbitmq 유형 및 luiggio excel 번들로 직접 사용하고 있습니다.

아무도 비슷한 문제가 있습니까? 가능한 문제에 대한 모든 힌트를 환영합니다.

소비자 코드의

// 부분

public function execute(AMQPMessage $msg) 
    { 
     $data = array(); 
     $data = unserialize($msg->body); 

     if ($data['type'] == 'sometype') { 
       $this->excel->excelObj->getProperties()->setCreator("something"); 
       $value = $this->excel->excelObj->setActiveSheetIndex(0); 
       $value->setCellValue('A1', 'Some Number'); 
       $value->setCellValue('B1', 'Some Other Number'); 
       $incr = 2; 
       foreach ($data['somedata'] as $datum) { 
        value->setCellValue('A'.$incr, $datum['that_number']); 
        value->setCellValue('B'.$incr, $datum['that_number']); 
       } 
     } else if ($data['type'] == 'sometype2') { 
       $this->excel->excelObj->getProperties()->setCreator("something"); 
       $value = $this->excel->excelObj->setActiveSheetIndex(0); 
       $value->setCellValue('A1', 'Some Number2'); 
       $incr = 2; 
       foreach ($data['somedata'] as $datum) { 
        value->setCellValue('A'.$incr, $datum['that_number']); 
       } 
     } 

     $this->excel->excelObj->getActiveSheet()->setTitle('Simple'); 
     $this->excel->excelObj->setActiveSheetIndex(0); 
     $tempName = $data['type'] .microtime(). '.xls'; 
     $this->excel->getStreamWriter()->write('/tmp/'.$tempName); 
    } 
+0

피드백을 받고 싶다면 코드를 보여줘야한다고 생각합니다. – hakre

+0

분 단위로 샘플 코드 추가 – amitchhajer

+0

@hakre 샘플 코드 – amitchhajer

답변

0

PHP 엑셀 개체를 만들 때 문제가 발생했습니다.

마지막으로 하나의 엑셀 시트가 생성 된 후 강제로 엑셀 개체를 초기화/재설정하여 해결합니다.

0

아마도 당신은 항상 같은 행에 작성하는, 그래서 당신이 당신의 foreach 루프 내에서 $의 증분을 증가하지 않는 사실; value은 해당 루프 내에서 $value이어야합니다.

$value->setCellValue('A'.$incr++, $datum['that_number']);