0

我想用 PHP 逐行读取 Excel 文件,因为一次读取整个文件会导致内存溢出。

我已经搜索了很多,但直到现在还没有运气。

我认为 PHPExcel 库可以读取 excel 文件的块,当您实现过滤器类时,但每次获取此块时,它都会读取整个文件,这在巨大的 .xls 文件中是不可能的,因为它需要时间。

有什么帮助吗?

4

2 回答 2

0

这可能是完全没有问题的,但从我从你的问题中得到的信息来看,以下似乎是一个明显的选择,至少需要考虑一些事情......

我的印象是,这是一个非常大的文件,需要经常访问。所以,我只是尝试将其数据导入数据库。

  • 我想没有必要解释数据库是性能和缓存方面的大师。
  • 之后仍然可以将数据库的内容导出到 excel 文件中。
  • MySql 与 PHP 配合得很好,而且肯定比 excel 文件更容易访问。大多数 php 托管服务提供商默认提供 MySql 数据库和 PhpMyAdmin 管理工具。

怎么做:

  • 如果您安装了 PhpMyAdmin,那么您可以按照这些简单的步骤操作。
  • 如果您对服务器具有命令行访问权限,那么您甚至可以将文件从命令行直接导入 MySql 数据库。
于 2013-08-11T14:18:45.727 回答
0

如果您从读取的 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 文件存储在内存中。这会更慢,但不会吃掉服务器的所有内存!

于 2013-09-17T14:08:01.380 回答