2

Iamは、ZendFrameworkとPHPExcelを使用してExcel2007ファイルを作成しようとしています。PHPのメモリ制限を増やすことができることは知っていますが、他に方法はありませんか?

これはこれまでの私のコードです。5000行77列でうまく機能しますが、12000行が必要です:-)メモリは128MBに設定されています

    $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_sqlite;
    PHPExcel_Settings::setCacheStorageMethod($cacheMethod);

    $db = Zend_Db_Table_Abstract::getDefaultAdapter();
    $phpExcel = new PHPExcel();

    // set headers
    $select = $db->select();
    $select->from('IMPORT')->limit(1);
    $data = $select->query()->fetchAll();
    $columns = array_keys($data[0]);
    $phpExcel->setActiveSheetIndex(0);
    $colCNT = 1;

    foreach ($columns as $column) {
        $letter = Nc_Utils::getNameFromNumber($colCNT);
        $phpExcel->getActiveSheet()->SetCellValue($letter . '1', $column);
        $colCNT++;
    }

    unset($select);
    unset($data);

    $sql = 'SELECT * FROM IMPORT LIMIT 7000';
    $stmt = $db->query($sql);

    $rowCNT = 2;
    while($rows = $stmt->fetch()){
        $phpExcel->getActiveSheet()->fromArray($rows, null, 'A'.$rowCNT);
        $rowCNT++;
    }  

    unset($rowCNT);
    unset($select);
    unset($db);

    // MEMORY USAGE = 4 MB!

    $phpExcelWrite = new PHPExcel_Writer_Excel2007($phpExcel);
    $phpExcelWrite->setUseDiskCaching(true);
    $phpExcelWrite->save(str_replace('.php', '.xls', __FILE__));

PHPの致命的なエラー:102行目の/Applications/MAMP/htdocs/phpexcel/library/PHPExcel/Shared/XMLWriter.phpで許可されたメモリサイズ134217728バイトが使い果たされました(13878925バイトを割り当てようとしました)

4

4 に答える 4

3

PHPExcelのWebサイトには、メモリ消費を削減するための可能な方法に関する議論があります。

于 2012-09-03T17:01:09.850 に答える
1

使っPhpExcelてみましたが、あなたと同じ問題が見つかりました。私はメモリ消費を減らすためにすべての提案を試しましたが(Klinkyが彼の回答に投稿したリンク)、25〜30%の改善しか得られませんでした。ExcelではなくCSV出力を作成することも考えました。

現在、PEARのSpreadsheet_Excel_Writerを使用しており、ファイルの生成にはかなりの時間がかかりますが、ほぼ同じ量のデータ(11k行62列)で正常に機能します。

ほど強力ではありませんPhpExcelが、あなたの例でわかるように、セルのスタイル設定や関数の記述には使用していませんね。

例:

$workbook = new Spreadsheet_Excel_Writer();
$workbook->send($filename . '.xls');
$workbook->setVersion(8); // excel 8
// Create worksheet
$worksheet =& $workbook->addWorksheet('submissions');
$worksheet->setInputEncoding('UTF-8');
// Write some data on Sheet 1
$row = 0;
$worksheet->write($row, 0, 'Poster #ID');
$worksheet->write($row, 1, 'Surname');
$worksheet->write($row, 2, 'Firstname');
$worksheet->write($row, 3, 'Country');
$worksheet->write($row, 4, 'E-mail');
$worksheet->write($row, 5, 'All authors');
$worksheet->write($row, 6, 'Institutions');
$worksheet->write($row, 7, 'Abstract topic');
$worksheet->write($row, 8, 'Abstract title');
foreach ($records as $rec_id => $rec_data) {
    $row++;
    $worksheet->write($row, 0, 'P-' . $rec_data['id']);
    $worksheet->write($row, 1, $rec_data['submitter_surname']);
    $worksheet->write($row, 2, $rec_data['submitter_firstname']);
    $worksheet->write($row, 3, $rec_data['submitter_country']);
    $worksheet->write($row, 4, $rec_data['submitter_email']);
    $worksheet->write($row, 5, $rec_data['authors']);
    $worksheet->write($row, 6, $rec_data['institutions']);
    $worksheet->write($row, 7, $rec_data['abstract_topic']);
    $worksheet->write($row, 8, $rec_data['abstract_title']);
}
$workbook->close(); // output
于 2012-09-03T17:11:05.967 に答える
1

PHP_XLSXWriterを試しましたか?

これは、PHPのシンプルで軽量なXLSXライターライブラリです。PHP_Excelほど完全な機能はありませんが、PHP_Excelデータのエクスポートでしばしば直面するメモリとCPU使用率の問題の一部を解決するように設計されています。

于 2014-04-16T04:05:06.920 に答える
1

いくつかのメモリの問題が発生し、最新バージョンのPHPExcelに更新すると、パフォーマンスが向上しました。

于 2015-02-20T16:58:17.473 に答える