arodiss/xls-bundle

用于 Symfony2 的 Excel 文件操作

安装次数: 105,506

依赖者: 0

建议者: 0

安全: 0

星标: 5

关注者: 5

分支: 9

开放问题: 0

类型:symfony-bundle

v0.6.0 2017-12-26 16:44 UTC

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),但这没有保证。