我想用 PHP 逐行读取 Excel 文件,因为一次读取整个文件会导致内存溢出。
我已经搜索了很多,但直到现在还没有运气。
我认为 PHPExcel 库可以读取 excel 文件的块,当您实现过滤器类时,但每次获取此块时,它都会读取整个文件,这在巨大的 .xls 文件中是不可能的,因为它需要时间。
有什么帮助吗?
这可能是完全没有问题的,但从我从你的问题中得到的信息来看,以下似乎是一个明显的选择,至少需要考虑一些事情......
我的印象是,这是一个非常大的文件,需要经常访问。所以,我只是尝试将其数据导入数据库。
怎么做:
如果您从读取的 Excel 文件中唯一需要的是数据,那么这是我读取大型 Excel 文件的方法:
我在我的服务器上安装 gnumeric,即使用 debian/ubuntu:apt-get install gnumeric
然后读取我的 excel 文件并将其存储到二维数据数组中的 php 调用非常简单(维度是行和列):
system("ssconvert \"$excel_file_name\" \"temp.csv\"");
$array = array_map("str_getcsv", file("temp.csv"));
然后我可以用我的数组做我想做的事。对于一个 10MB 的大 xls 文件,这需要不到 10 秒的时间,同时我需要在我最喜欢的电子表格软件上加载文件!
对于非常大的文件,您应该使用 fopen() 和 file_getcsv() 函数,并在不将数据存储在巨大数组中的情况下执行您必须做的事情,以避免使用 file() 函数将整个 csv 文件存储在内存中。这会更慢,但不会吃掉服务器的所有内存!