arodiss / xls-bundle
用于 Symfony2 的 Excel 文件操作
v0.6.0
2017-12-26 16:44 UTC
Requires
- php: >=5.3.2
- phpoffice/phpexcel: 1.8.*
- symfony/framework-bundle: ~2.3|~3.0|~4.0
- symfony/process: ~2.5|~3.0|~4.0
README
Symfony2 的 .xls 文件读写,基于 PHPExcel
安装
通过 composer
require: {
...
"arodiss/xls-bundle": "*@stable"
}
使用示例
读取小文件
$reader = $container->get("arodiss.xls.reader"); $content = $reader->readAll("/path/to/file.xls"); var_dump($content); //array(2) => // array(2) => // 0 => string(10) "First line" // 1 => null // array(2) => // 0 => string(10) "Line number" // 1 => int 2
读取大文件
如果文件很大,前面的方法可能会耗尽你的内存。然而这是安全的
$reader = $container->get("arodiss.xls.reader"); $iterator = $reader->getReadIterator("/path/to/file.xls"); while($iterator->valid()) { var_dump($iterator->current()); $iterator->next(); } //same output format
读取更大的文件
有时候 PHPOffice 无法提供合理的性能。在这种情况下,这个包提供了一个备选的读取器,它封装了 Python 实现。它在功能上尤其是在交互(如错误处理)方面比较基础,但性能更快,尤其是在大文件上。为了使用它,你必须安装 openpyxl
(用于 xlsx)和 xlrd(用于 xls)库,你可以通过 pip 包管理器轻松完成
$reader = $container->get("arodiss.xls.reader.python"); $iterator = $reader->getReadIterator("/path/to/file.xls"); while($iterator->valid()) { var_dump($iterator->current()); $iterator->next(); } //same output format
从 Symfony 控制器返回 XLS 文件
$file = $container ->get("arodiss.xls.builder") ->buildXlsFromArray(array( array("row one field one", "row one field two"), array("row two field one") )) ; //now $file is path to tmp file with data $response = new Response(); $response->headers->set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); $response->headers->set("Content-Disposition", "attachment;filename=excelfile.xlsx"); $response->setContent(file_get_contents($file)); return $response;
写入文件(推荐)
$writer = $container->get("arodiss.xls.writer.buffered"); $writer->create("users.xls", array("name", "email")); //second argument represents first row foreach ($userProvider->getUsers() as $user) { $writer->appendRow("users.xls", array($user->getName(), $user->getEmail())); } $writer->flush();
写入文件(不推荐)
对于 xls 格式的写操作非常昂贵,因此前面的例子使用了 BufferedWriter,它将你的数据存储在缓冲区中,只在刷新缓冲区时写入文件。如果出于某种原因你不想这样做,你可以使用服务 xls.writer
而不是 xls.writer.buffered
。
支持格式
文件总是以 Excel2007 (.xlsx) 格式写入。然而,读取操作可能也适用于 PHPExcel 支持的其他格式(Excel5、Office Open XML、SpreadsheetML、OASIS、CSV、Gnumeric、SYLK),但这没有保证。