Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-读取excel文件_Php_Excel - Fatal编程技术网

PHP-读取excel文件

PHP-读取excel文件,php,excel,Php,Excel,我想用PHP逐行读取Excel文件,因为一次读取整个文件会导致内存溢出 我找了很多,但到现在为止运气都不好 我认为PHPExcel库可以在实现filter类时读取excel文件的块,但每次它获取该块时,它都会读取整个文件,这在大型.xls文件中是不可能的,因为这需要花费时间 有什么帮助吗? < P>这可能是完全没有问题的,但是从我从你的问题中得到的信息中,下面似乎是一个显而易见的选择,至少要考虑一些…… 我觉得这是一个非常大的文件,需要经常访问。因此,我将尝试将其数据导入数据库 我想没有必要解

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

我找了很多,但到现在为止运气都不好

我认为PHPExcel库可以在实现filter类时读取excel文件的块,但每次它获取该块时,它都会读取整个文件,这在大型.xls文件中是不可能的,因为这需要花费时间


有什么帮助吗?

< P>这可能是完全没有问题的,但是从我从你的问题中得到的信息中,下面似乎是一个显而易见的选择,至少要考虑一些…… 我觉得这是一个非常大的文件,需要经常访问。因此,我将尝试将其数据导入数据库

  • 我想没有必要解释数据库在性能和缓存方面是大师级的
  • 之后仍然可以将数据库的内容导出到excel文件中
  • MySql与PHP配合使用效果很好,当然比excel文件更容易访问。默认情况下,大多数php托管提供商都提供带有PhpMyAdmin管理工具的MySql数据库
如何做:

  • 如果您安装了PhpMyAdmin,那么您可以遵循
  • 如果您具有对服务器的命令行访问权限,那么您甚至可以将文件从命令行直接导入MySql数据库
如果您只需要读取Excel文件中的数据,下面是我读取大型Excel文件的方法:

我在我的服务器上安装gnumeric,即使用debian/ubuntu: apt获取安装gnumeric

然后,读取我的excel文件并将其存储到二维数据数组的php调用非常简单(维度是行和列):

然后我可以用我的数组做我想做的事情。对于一个10MB的大xls文件,这需要不到10秒的时间,同时我需要将该文件加载到我最喜欢的电子表格软件中


对于非常大的文件,您应该使用fopen()和file_getcsv()函数,并在不将数据存储在巨大数组中的情况下执行必须执行的操作,以避免使用file()函数将整个csv文件存储在内存中。这会比较慢,但不会占用服务器的所有内存

为什么不将您的xls文件转换为cvs并逐行读取(使用fopen/fgets)?当您在PHPExcel中使用“块”时,它会扫描整个文件;它不会加载整个文件。。。。但是,您还使用了其他哪些PHPExcel内存节省工具,如cell缓存?@Mark,对不起,我的错,我的意思是扫描整个文件。该文件可以包含数百万行。我只需要对文件进行一次分析。有没有办法,像读取CSV文件(fgetcsv)那样逐行读取?@casimirithippolyte,怎么做?我不能直接将数据导入数据库,我必须解析文件,要求客户对文件中的字段进行澄清,同时我还必须检查记录中是否有损坏的数据等..谢谢回复,我知道gnumeric,但我不喜欢它,因为它是一个Gnome项目,所以它需要Gnome或它的一些包。我想要一个独立的工具。我现在已经建立了自己的图书馆,我以前只需要它来节省时间。
system("ssconvert \"$excel_file_name\" \"temp.csv\"");
$array = array_map("str_getcsv", file("temp.csv"));