1

在我的项目中,我使用 symfony2 PHPExcel 包装器https://github.com/liuggio/ExcelBundle

通过上面链接中的示例,我可以创建新的 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 文件做出响应?

4

3 回答 3

2

你可以这样做

// 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);

如果你不明白请评论..

于 2012-12-05T15:08:11.093 回答
0

我会将文件保存到磁盘并亲自将用户重定向到磁盘版本。这将允许几件事

  • 您的 Web 服务器提供文件而不是 PHP,从性能和内存使用的角度来看,这是一件好事。
  • 稍微解耦您的体系结构以允许将来进行更改,例如将 Excel 文件的创建和加载移动到异步操作。
  • 使用http://wiki.nginx.org/XSendfile的能力(还有一个 Apache 模块)。
  • 用户可以重新下载文件或暂停和恢复下载而不重新创建它。

为此,您需要

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

tempfile api (http://us2.php.net/tmpfile) 在这里可能很有用。

于 2012-12-02T21:11:40.993 回答
0

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);
于 2013-12-06T23:10:09.440 回答