数据被覆盖,rabbitmq优秀

时间:2013-03-06 21:14:19

标签: php symfony rabbitmq phpexcel amqp

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

我面临的问题是,如果只运行一个消费者,则数据会在Excel工作表中被覆盖。如果我运行多个消费者,问题大多已经解决。

我使用direct作为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);
    }

2 个答案:

答案 0 :(得分:0)

可能你没有在foreach循环中增加$ incr,所以你总是写到同一行;并且value也应该在这些循环中$value

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

答案 1 :(得分:0)

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

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