我需要将Excel文件(.xlsx)中的所有数据插入到我的数据库中。我已经尝试了所有可用的方法,比如缓存,让它按块读取块,但似乎没有任何工作。以前有没有人尝试过大文件?我的电子表格包含大约32列和大约700,000行记录。
该文件已上传到服务器中。我想写一个cron作业来实际读取excel文件并将数据插入数据库。我只是每次读取5000,3000甚至10个记录,但没有一个工作。会发生什么情况会返回此错误:
simplexml_load_string():内存分配失败:增长缓冲区。
我确实尝试过使用CSV文件类型并设法让每次运行4000k条记录,但每次处理大约需要5分钟,但任何更高的都会失败。并得到相同的错误。但是要求在.xlsx文件类型中需要它,所以我需要坚持下去。
答案 0 :(得分:0)
考虑使用外部工具将其转换为CSV格式,例如来自ssconvert
包的Gnumeric
,然后逐行读取带有fgetcsv
功能的CSV。
答案 1 :(得分:0)
出现此问题是因为您正在尝试读取整个XML文件的内容。按块进行缓存和读取块无济于事,因为您使用的库需要在一个点读取整个XML文件以确定电子表格的结构。 因此,对于非常大的文件,XML文件非常大,以至于读取它会消耗所有可用内存。唯一可行的选择是使用拖缆并优化读数。
这仍然是一个非常复杂的问题。例如,要解析工作表中的数据,您需要从一个XML文件中读取共享字符串,并从另一个XML文件中读取工作表的结构。由于存储共享字符串的方式,因此在读取表单结构时需要在内存中包含这些字符串。如果您有数千个共享字符串,那就成了问题。
如果您有兴趣,Spout解决了这个问题。它是开源的,所以你可以看一下代码!