如何在symfony2中使用PHPExcel修改excel文件

如何在symfony2中使用PHPExcel修改excel文件,php,symfony,phpexcel,Php,Symfony,Phpexcel,在我的项目中,我使用symfony2 PHPExcel包装器 通过上面链接中的示例,我可以创建新的excel文件。但是,此文件根本没有样式或标记。所以我创建了一个excel模板,我想在其中输入一些数据 我知道如何加载excel文件: $excelObj = $this->get('xls.load_xls2007') ->load($this->get('kernel') ->getRootDir() .

在我的项目中,我使用symfony2 PHPExcel包装器

通过上面链接中的示例,我可以创建新的excel文件。但是,此文件根本没有样式或标记。所以我创建了一个excel模板,我想在其中输入一些数据

我知道如何加载excel文件:

$excelObj = $this->get('xls.load_xls2007')
                 ->load($this->get('kernel')
                 ->getRootDir() . '/../web/excel-template.xlsx');

//custom modifications on excel file
现在我需要创建一个响应。但是在ExcelBundle的文档中没有关于如何做到这一点的信息。它们只是显示了响应如何为由代码创建的excel文件工作

我试过:

 $excelService->setExcelObj($excelObj);
 $response = $excelService->getResponse();
 //the rest is equal to the code in the doc
但它给了我一个空白的excel文档


您知道如何使用加载的excel文件进行响应吗?

我会将文件保存到磁盘,并将用户重定向到磁盘版本。这将允许一些事情

  • 从性能和内存使用的角度来看,web服务器提供文件而不是PHP是一件好事
  • 稍微解耦您的体系结构,以允许将来的更改,例如将Excel文件的创建和加载移动到异步操作
  • 使用的能力(还有一个Apache模块)
  • 用户可以重新下载文件或暂停并继续下载,而无需重新创建
要做到这一点,您需要

  • 创建文件后,将其保存到可通过web访问的临时目录
  • 将用户重定向到该文件位置
  • 创建一个cron或其他作业,删除temp目录中较旧的文件

tempfileapi(http://us2.php.net/tmpfile)这里可能有用。

您可以通过

// Read the file
    $objReader = PHPExcel_IOFactory::createReader($fileType);
    $objPHPExcel = $objReader->load($fileName);

    // Change the file
    $objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue('A1', 'Hello')
                ->setCellValue('B1', 'World!');

    // Write the file
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, $fileType);
    $objWriter->save($fileName);

如果您不理解,请发表评论。

PHPExcelbundle的新版本2.*可以帮助您

现在可以:

//read
$phpExcelObject = $this->get('phpexcel')->createPHPExcelObject('file.xls');
$phpExcelObject->setActiveSheetIndex(0)
  ->setCellValue( 'C6', 'some text' )
  ->setCellValue( 'D6', 'some text2' );
$writer = $this->get('phpexcel')->createWriter($phpExcelObject, 'Excel5');
$writer->save('file.xls');
// or 
$response = $this->get('phpexcel')->createStreamedResponse($writer);

我不知道这怎么能解决我的问题。我只想知道保存和响应xml文件的代码行