2013-03-06 77 views
0

我使用rabbitmq队列从控制器获取数据,然后消费者服务处理数据并使用php-excel生成Excel表。数据被覆盖rabbitmq excel

我面临的问题是,如果只有一个用户运行,数据在Excel表中被覆盖。如果我运行多个消费者,则问题大部分已解决。

我正在使用directm作为rabbitmq类型和luiggio excel bundle for symfony2。

有没有人有类似的问题?欢迎任何关于可能的问题的提示。

的消费者代码

//部分

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 2013-03-06 21:15:59

+0

当然,添加示例代码在最小 – amitchhajer 2013-03-06 21:16:25

+0

@hakre添加示例代码 – amitchhajer 2013-03-06 21:22:21

回答

0

问题在于PHP excel对象被创建。

最后通过在生成一个excel表单后强制启动/重置excel对象来解决它。

0

可能的事实,你不增加你的foreach环路内$增量,所以你总是写在同一行; value也应该是$value

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