首页 > 解决方案 > 用 PHP 解析大型 xls 文件的最快方法

问题描述

所以基本上我试图在 PHP (Laravel) 中解析大型 xls/xlsx 文件。流程与平时略有不同:

  1. 我需要从特定行(由用户提供)中获取列标题并作为数组返回

  2. 然后我需要将 xls 文件解析为数组

  3. 我需要遍历数组,将每个值的键映射到列名(因为输入是可变的,而 mysql 列不是),所以我将例如 [someKey => value] 更改为 [item => value]每次

  4. 然后我使用 Laravel 的 :insert() 将数组批量插入数据库

这基本上是一个 api,因此它需要在例如 15k 行 xls 文件上相当快。到目前为止,我尝试了两件事,都有自己的问题:

  1. Laravel Excel没有办法只抓取一行,它解析整个文件两次,一次返回标题,一次映射值键

  2. 我从 Laravel 控制器调用的Python openpyxlexec()虽然速度更快,但似乎更难控制,因为到特定键的数组映射变得更加复杂。

有没有更好/更快的方法来做这样的事情?Laravel 无法更改,但其他一切都是公平的游戏。我对输入文件的控制也为零,但用户必须定义​​包含标题的行。

这是在 Digital Ocean 液滴、LAMP 堆栈、CPU 优化液滴、4 GB / 2 vCPU 上运行的。它在同一台机器上同时运行前端(React)和后端(Laravel)。发生的情况是,当我运行解析时,CPU 立即上升到 100%,这不是一个大问题,因为它相当稳定,但我只是在寻找一种可能的更好/更快的方法,特别是一种方法只拉出一行,这样我就可以更快地返回标题,然后也许是一种更好的方法来映射数组中的列名。

标签: phpexcellaravel

解决方案


推荐阅读