2011-02-04 4 views
8

PHPExcelが5000行以上を許可しない理由を教えてください。 私は自分のプロジェクトでレポート生成のためにオープンソースのPHPExcelを使用しています.Mysql-DBから5000行以上のデータを書き込むことはできませんでした。私の結果セットは、クエリが実行されたとき7230レコードを取得します。私はそれをどのように修正すればよい。..あなたのコードやクラスのコードを持たずにPHPExcelで5000行を超える書き込みが許可されない理由

+0

正確に5000行を取得できますか?その場合、PHPExcelには制限があるかもしれませんが、CodePlexのサポートフォーラムで質問するほうがよいでしょう。PHPExcelのサポートがかなり良いとわかっています。そうでない場合は、おそらくあなたのサーバーのメモリ/タイムアウトの問題です。 – user183037

答えて

15

ほぼ確実にこれはタイムアウトやメモリの問題です。ワークシートサイズのPHPExcelの唯一の制限は65,536行と256(IV)列です(Excel5 Writer使用時)。または1,048,576行と16,384(XFD)列(Excel2007 Writerを使用している場合)。

任意のPHPExcelの例外のトラップに/しようとcatchブロックを使用して...あなたのエラーログが常に有効になっていることを確認してください。また、メモリとパフォーマンスに関するPHPExcelサイトディスカッションスレッドを読んでください。

1

が非常に困難である私はあなたがXLSファイルに複数の5kの行を書き、またはワークシートの内側にすることはできません意味するか...と考えていますか?それ以外の場合は、最初のシートに5K行、2番目に5K行(DBが大きくなると、各シートは5K行)という醜い回避策があります。 私はXLSに5k行の制限があるとは思わないので、あなたのスクリプトに何か間違っているか間違って設定されているはずです。それは常に5k行を印刷しますか?タイムアウトが原因である可能性がありますか? (スクリプトまたは接続の)

0

この種の問題は、おそらくサーバのメモリの問題以上のものです。あなたはどんな種類のサーバーを所有していますか?大きなデータファイルを処理するのに十分なメモリとリソースがあると確信していますか?どちらの方法でも指示できない場合は、一度に数千のレコードを読み取り、処理してから次のチャンクに移動するのが最善の方法です。私は大規模なデータファイルを管理可能な部分(ファイル)に分割し、その後、それぞれの部分を処理して私の望む結果を得ることができます。すべての部分が処理されたら、それらをマージして新しい大きなデータファイルを作成することができます。

9

私は同じ問題を抱えていました。あなたは十分な時間とメモリの制限を割り当てる必要があります。私はここ3別のサーバー上で私の解決策をテストしている

は結果である:

ファイルの読み込みについて5000レコード(12列)


9時48分22秒のピークメモリ使用量:1.25メガバイトを

読み取りデータ:
午前9時48分31秒ピーク時のメモリ使用量:アレイに索引付けデータの後に54.5メガバイト


午前9時48分35秒のピークメモリ使用量:68.5メガバイト

レコード:4504

私はそれが370に上がったインデックスを作成した後、22.000レコードを読み取るためにメモリと時間を増加させました。00メガバイト

ここでは、あなたのプログラム/関数内でPHPExcelを呼び出す溶液(他のすべてのコードシーケンスで正しいことを与えられている) です:すべてのオブジェクトは準備ができているように

ini_set("max_execution_time", 'time_limit'); //see manual 

はここにすべての初期化を実行します。その後、プログラムの内部構造にファイルとインデックスデータを読み込むためのメモリを割り当てる: - エラーを起こしやすい

ini_set('memory_limit', '???'); //your memory limit as string 
$excel = $excelReader->load($filePath); 
"Memory usage: " . (memory_get_peak_usage(true)/1024/1024) . " MB" 
//do the rest of the structure! 

良いアイデアは、あなたが400メガバイトに実行されませんので、データのいくつかの種類によって、このすべてを管理していることです!

+0

ini_set( 'memory_limit'、 '-1');単独でこれを修正する傾向があります – maxhud

2

ほぼ確実にこれはタイムアウトまたはメモリの問題です。ワークシートサイズのPHPExcelの唯一の制限は65,536行と256(IV)列です(Excel5 Writer使用時)。または1,048,576行と16,384(XFD)列(Excel2007 Writerを使用している場合)。

あなたはそれは、レコードに65536のを超える行を記述することができ、このラインに

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 

として

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 

を変更することができます。

関連する問題