2013-03-06 75 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']);