7

I'm trying to read a 17MB excel file (2003) with PHPExcel1.7.3c, but it crushes already while loading the file, after exceeding the 120 seconds limit I have. Is there another library that can do it more efficiently? I have no need in styling, I only need it to support UTF8. Thanks for your help

4

6 に答える 6

9

PHPExcel を使用する場合、ファイルサイズは適切な尺度ではありません。各ワークシートのセル数 (行 x 列) を把握することがより重要です。

スタイリングが不要な場合は、次のように呼び出していますか?

$objReader->setReadDataOnly(true);

ファイルをロードする前に?

すべてのワークシートにアクセスする必要がない場合、またはワークシート内の特定のセルのみにアクセスする必要がない場合は、次の使用を検討してください。

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

また

$objReader->setLoadSheetsOnly(1)

または readFilter を定義する

セルキャッシュを使用していますか? もしそうなら、どのような方法ですか?これにより、ロード時間が遅くなります。

于 2010-06-03T13:55:36.497 に答える
2

読み取ったExcelファイルから必要なものがデータだけである場合、巨大なExcelファイルを読み取る私の方法は次のとおりです。

サーバーに gnumeric をインストールします。つまり、debian/ubuntu を使用します: apt-get install gnumeric

次に、Excel ファイルを読み取り、それを 2 次元データ配列に格納するための php 呼び出しは非常に単純です (次元は行と列です)。

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

次に、配列でやりたいことを実行できます。10MB の大きな xls ファイルの場合、これは 10 秒もかからず、お気に入りの表計算ソフトウェアでファイルをロードする必要があるのと同じ時間です。

非常に巨大なファイルの場合、fopen() および file_getcsv() 関数を使用し、file() 関数を使用して csv ファイル全体をメモリに格納することを避けるために、巨大な配列にデータを格納せずに必要なことを行う必要があります。これは遅くなりますが、サーバーのメモリをすべて消費することはありません!

于 2013-09-17T14:04:34.350 に答える
1

17MB はかなりのファイルです。

17MB のファイルにかかる時間を計算できるように、1MB のファイルの解析にかかる時間を計算します。その場合、1 つのオプションとして、120 秒の制限を増やすことが考えられます。

または、より効率的な CSV にエクスポートし、PHP の fgetcsv 経由でインポートすることもできます。

于 2010-06-03T13:50:46.047 に答える
1

大きなファイルを読むには、 Excel エクスプローラーの方が優れていると聞いたことがあります。

于 2010-06-03T13:57:53.063 に答える
0

おそらく、csv に変換/エクスポートして、組み込みの fgetcsv() を使用できます。必要な機能の種類によって異なります。

于 2010-06-29T00:59:45.590 に答える