代码之家  ›  专栏  ›  技术社区  ›  botmsh

用PHP读取大型excel文件

  •  5
  • botmsh  · 技术社区  · 16 年前

    我试图用PHPExcel1.7.3c读取一个17MB的excel文件(2003),但它在加载文件时已经崩溃了,超过了我的120秒限制。 谢谢你的帮助

    6 回复  |  直到 16 年前
        1
  •  8
  •   Mark Baker    16 年前

    使用PHPExcel时,Filesize不是一个很好的度量方法,更重要的是了解每个工作表中的单元格数(rowsxcolumns)。

    如果你不需要造型,你会打电话给:

    $objReader->setReadDataOnly(true);
    

    在加载文件之前?

    如果不需要访问所有工作表,或者只需要访问工作表中的某些单元格,请查看使用

    $objReader->setLoadSheetsOnly(array(1,2))
    

    $objReader->setLoadSheetsOnly(1)
    

    你在使用单元缓存吗?如果是,用什么方法?这会减慢加载时间。

        2
  •  2
  •   Baptiste    12 年前

    如果您只需要读取Excel文件中的数据,那么以下是我读取大型Excel文件的方法:

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

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

    system("ssconvert \"$excel_file_name\" \"temp.csv\"");
    $array = array_map("str_getcsv", file("temp.csv"));
    

    对于非常大的文件,您应该使用fopen()和file_getcsv()函数,并且在不将数据存储在巨大数组中的情况下执行必须执行的操作,以避免使用file()函数将整个csv文件存储在内存中。

        3
  •  1
  •   Snowcrash    16 年前

    17MB是一个很大的文件。

    一个1MB文件需要多长时间来解析,这样就可以计算出一个17MB文件需要多长时间。那么一个选择就是增加你的120秒限制。

        4
  •  1
  •   Sjoerd    16 年前
        5
  •  0
  •   gblazex    16 年前

    也许您可以将其转换/导出为csv,并使用内置的fgetcsv()。取决于你需要什么样的功能。

        6
  •  0
  •   Leonardo Delfino    11 年前

    https://github.com/nuovo/spreadsheet-reader )阅读速度很快 XLSX , ODS CSV ,并且只有在阅读 XLS

    推荐文章