0

コントローラーからデータを取得するためにrabbitmqキューを使用しており、コンシューマーサービスがデータを処理し、php-excelを使用してExcelシートを生成しています。

私が直面している問題は、コンシューマーが 1 つしか実行されていない場合に 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);
    }
4

2 に答える 2

0

問題は、PHP の Excel オブジェクトの作成にありました。

最後に、1 つの Excel シートが生成された後に強制的に Excel オブジェクトを開始/リセットすることで解決しました。

于 2013-10-09T19:10:41.627 に答える
0

おそらく、foreachループ内で $incr をインクリメントしていないため、常に同じ行に書き込みます。これらのループ内にもvalueある必要があります。$value

$value->setCellValue('A'.$incr++, $datum['that_number']);
于 2013-03-07T07:28:40.753 に答える