2

この機能を使用すると:

$objPHPExcel = PHPExcel_IOFactory::load($fileName);

小さなExcelファイルでは、しばらく時間がかかりますが、最終的に$objPHPExcelに広範な配列を取得します...残念ながら、少し大きくより複雑なEcelファイルで試してみると、次のようになります:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)

このファイルは xlsm ファイルで、1.7MB です。

必要なコードはこれだけだと思います。現在、ローカルで設定されているデフォルトの WAMP を使い果たしています。

4

2 に答える 2

4

同じ問題がありました。当社では、巨大な xls(x) ファイルをデータベースにインポートする必要があります。PEAR Spreadsheet Excel Reader を使用してきましたが、サポートが終了し、新しいファイルで多くのバグが発生したため、PHPExcel に切り替えようとしました。残念ながら、メモリ制限の問題を解決することはできませんでした。そして、私たちはそれをしようと多くの時間を費やしました. PHPExcel で 'BB' までの列を含む 100K 行をロードする方法はありません。

それは仕事に適したツールではありません。PHP Excel は、スプレッドシート全体をメモリ内にオブジェクトとして構築します。これを回避する方法はありません。

必要なのは、ファイルを行ごと、セルごとに読み取ることができるツールです。

私たちの解決策は、イベント モデルで Java とApache POIクラスを使用することでした。これは、読み取り専用の操作を行いますが、メモリと CPU の効率が非常に優れています。

古い OLE ベースではなく、xml ベースの「Office Open XML」形式 (xlsx) のみをサポートする必要がある場合は、独自の XML として処理できます。あなたがそれに入るなら、フォーマットはそれほど複雑ではありません。ファイルを解凍して、xml を確認するだけです。文字列テーブルを含む 1 つのファイルと、各シートごとに行とセルを含む 1 つのファイルがあります。最初に文字列テーブルを解析し、次に xml リーダー (DOM ではなく) でシート データを解析する必要があります。

私の知る限り、2013 年 10 月現在、大きな Excel ファイルをすぐにインポートできる PHP ライブラリはありません。

幸運を。

于 2013-10-22T13:41:53.560 に答える