8

PHPExcelが5000行を超えない理由を教えてください。プロジェクトのレポート生成にオープンソースのPHPExcelを使用していますが、Mysql-DBから5000行を超えるデータを書き込むことができませんでした。私の結果セットは、クエリが実行されたときに7230レコードをフェッチします。どうすれば修正できますか。

4

5 に答える 5

24

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

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

于 2011-02-04T08:56:26.047 に答える
10

私も同じ問題を抱えていました。十分な時間とメモリ制限を割り当てる必要があります。

3つの異なるサーバーでソリューションをテストしました。結果は次のとおりです。

約5000レコード(12列)

ファイルの読み取り: 09:48:
22ピークメモリ使用量:1.25 MB

データの読み取り:09:48:
31ピークメモリ使用量:54.5 MB

データをアレイにインデックス付けした後: 09:48:
35ピークメモリ使用量:68.5 MB

記録:4504

インデックス作成後に22.000レコードを読み取るためのメモリと時間を増やし、370.00MBに増やしました。

プログラム/関数で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 MBに達しないように、いくつかのカテゴリのデータでこれらすべてを管理することをお勧めします-エラーが発生する可能性があります!

于 2011-05-25T09:21:20.500 に答える
5

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

この行を変更できます

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

なので

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

次に、65536行を超えるレコードを書き込むことができます。

于 2014-07-24T10:01:46.017 に答える
1

あなたのコードやクラスのコードがなければ、私は信じています... XLSファイルまたはワークシート内に5k行を超える行を書くことができないということですか?そうしないと、最初のシートに5K行を書き込み、2番目のシートに残りを書き込むという醜い回避策が考えられます(DBが大きくなると、各シートに5K行が書き込まれます)。XLSには5k行の制限があるとは思わないので、スクリプトに何か問題があるか、構成が間違っているはずです。何度か試したことはありますか?常に5k行を印刷しますか?または、タイムアウトが原因である可能性がありますか?(スクリプトまたは接続の)

于 2011-02-04T07:12:02.517 に答える
0

このタイプの問題は、サーバーのメモリの問題である可能性が高いです。どのタイプのサーバーを使用していて、大きなデータファイルを処理するのに十分なメモリとリソースがあると確信していますか?どちらの方法でもわからない場合、最善の回避策は、一度に数千のレコードを読み取り、それらを処理してから、次のチャンクに移動することです。私自身、大きなデータファイルを管理可能な部分(ファイル)に分割し、その後、それらの各部分を処理して、目的の結果を得ることができます。すべてのピースが処理されたら、それらをマージして新しい大きなデータファイルを作成できます。

于 2011-02-04T07:18:15.803 に答える