如何使用symfony2 phpexcel bundle缓存phpexcel

时间:2013-09-24 09:12:33

标签: symfony doctrine-orm phpexcel

有没有办法加快我的功能来处理更大的excel文件? 有我的代码:

$excelService = $this->get('xls.service_xls5');

$excelObj = $this->get('xls.load_xls5')->setReadDataOnly(true)->load('../web/bundles/static/pliki/'.$name); 

$sheet = $excelObj->getSheet(0); 
$highestRow = $sheet->getHighestRow(); 
$highestColumn = $sheet->getHighestColumn(); 

for ($row = 1; $row <= $highestRow; $row++){ 

    $nazwaKlienta = $sheet->getCellByColumnAndRow(0,$row)->getValue();
    $ulica = $sheet->getCellByColumnAndRow(1,$row)->getValue();
    $miasto = $sheet->getCellByColumnAndRow(2,$row)->getValue();
    $kod = $sheet->getCellByColumnAndRow(3,$row)->getValue();
    $notatka = $sheet->getCellByColumnAndRow(4,$row)->getValue();
    $kolor = $sheet->getCellByColumnAndRow(5,$row)->getValue();

    if ($row == $highestRow) {
        $excelObj->disconnectWorksheets(); 
        unset($excelObj); 
    }

    $em = $this->getDoctrine()->getManager();
    $klient = new Klient();
    $klient->setNazwa($nazwaKlienta);
    (...)

    $em->persist($klient);
    $em->flush();
    $klientId = $klient->getId();
    $punkt = new Punkty();
    $punkt->setIdKlienta($klient);
    $em->persist($punkt);
    $em->flush();
}

此代码打开现有的excel文件并读取所有数据并将其写入数据库。它工作正常,数据量约150-200但我需要处理大约2000行的数据。我如何用phpexcelBundle缓存它,或者还有另一种方法?

1 个答案:

答案 0 :(得分:0)

缓存机制可以帮助您:

db中是否有$ name?如果是,则不执行此任务,只需从db中获取值。

您还可以使用APC设置给定$ name的到期时间。

请看一下:

rationally-boost-your-symfony2-application-with-caching-tips-and-monitoring

幻灯片27。