PHPExcel内存问题-还有其他想法吗?

PHPExcel内存问题-还有其他想法吗?,php,zend-framework,Php,Zend Framework,我正试图用Zend Framework和PHPExcel编写一个Excel2007文件。我知道我可以增加PHP内存限制。。但是没有别的办法吗 这是到目前为止我的代码,它可以很好地处理5000行和77列,但我需要12000行:-)内存设置为128MB $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_sqlite; PHPExcel_Settings::setCacheStorageMethod($cacheM

我正试图用Zend Framework和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致命错误:允许的内存大小134217728字节已用尽 (试图分配13878925字节)在 /Applications/MAMP/htdocs/phpexcel/library/phpexcel/Shared/XMLWriter.php 在线102


PHPExcel网站介绍了减少内存消耗的可能方法:

我曾尝试使用
PHPExcel
,但发现了与您相同的问题。 我尝试了所有减少内存消耗的建议(克林基在回答中的链接),但只得到了25-30%的改善。我甚至想过创建CSV输出而不是excel

现在我使用的是PEAR,它可以很好地处理大致相同数量的数据(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
你试过了吗


它是一个简单、轻量级的php XLSX编写器库。虽然没有PHP_Excel功能齐全,但它的设计目的是解决PHP_Excel数据导出经常遇到的一些内存和CPU使用问题。

我遇到了一些内存问题,更新到最新版本的PHPExcel提高了我的性能。

没有。Excel并不是一种可以“流”成小块的格式。整个事件都必须保存在内存中,所以请增加内存限制。仅更新此威胁,电子表格\u Excel\u Writer不再维护。。。。由于“调用时间按引用传递”的使用,不再维护,并且与PHP5.4+不兼容。