使用PHPExcel进行选择性下载

时间:2014-12-16 16:35:12

标签: php database mysqli phpexcel

我使用PHPExcel下载存储在MySQLi中的一些数据。我制作了一个适用于每个数据库的算法(理论上)。我已经用它们中的一些进行了测试,它工作正常。

我提取了数组中列的名称:column_names然后,我将标题和数据添加到Excel报告中。

    // Adding titles
    $objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue('A1',$bigTitle);

    $counter = 0;
    $let = 'a';
    while ($counter <= count($column_names)){
        $objPHPExcel->setActiveSheetIndex(0)
                    ->setCellValue(strtoupper($let).'3',  $column_names[$counter]);
        $let++;
        $counter++;
    }


    //Adding data
    $i = 4;
    while ($row = $result->fetch_array()) {
        $counter = 0;
        $let = 'a';
        while ($counter <= count($column_names)){
            $objPHPExcel->setActiveSheetIndex(0)
                        ->setCellValue(strtoupper($let).$i, $row[$column_names[$counter]]);
            $let++;
            $counter++;
        }
        $i++;
    }

我使用

连接到数据库
$conexion = new mysqli('localhost','user','pass','SAT_dbname',21);

我克隆了#34; SAT_db1&#34;数据库到&#34; SAT_db2&#34;。它们具有完全相同的结构但信息不同。如果我使用

,下载工作正常
$conexion = new mysqli('localhost','user','pass','SAT_db1',21);

但如果我使用

,它就无法正常工作
$conexion = new mysqli('localhost','user','pass','SAT_db2',21);

如果他们用不同的名字相同,我不知道出了什么问题。 PHPExcel不能与克隆数据库一起使用吗?还有什么呢?

错误在浏览器中显示为&#34;找不到文件&#34;。

EDIT 我整天都在测试下载,终于找到了一些东西:当我的寄存器很少时我可以下载。当我还有一些,我不能。

我将文件发送到浏览器:

    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="Report.xlsx"');
    header('Cache-Control: max-age=0');

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    $objWriter->save('php://output');

仍未找到解决方案。

1 个答案:

答案 0 :(得分:0)

PHPExcel对缓存有限制。我必须手动更改这些限制。我在创建PHPExcel对象之前使用了这段代码:

set_time_limit(0) ;

$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp; 
$cacheSettings = array( 'memoryCacheSize' => '500MB');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

我假设你有更大的文件,你可以扩展“memoryCacheSize”。