在代码点火器中从控制器下载excel文件

时间:2017-07-16 14:10:28

标签: php mysql codeigniter download xlsx

我遇到以下问题: 我使用代码点火器作为php框架,并从我的一个视图中我做了一个ajax调用函数,该函数使用PHPExcel生成和xlsx文件以及来自mysql数据库的数据。该文件在服务器中正确创建,但当我尝试force_download时,它不会下载任何内容。这是php函数:

public function generar_excel($idCotizacion){

isLogged($this->session->userdata('logged_in'));
isAdmin($this->session->userdata('logged_in'));

$cotizacion = $this->cotizacion_model->get_cotizacion_by_id($idCotizacion);

$propuestas = $this->propuesta_model->getPropuestasPorCotizacion($idCotizacion);

error_reporting(E_ALL);
date_default_timezone_set('Europe/London');

require_once 'application/libraries/PHPExcel-1.8/Classes/PHPExcel/IOFactory.php';
require_once 'application/libraries/PHPExcel-1.8/Classes/PHPExcel.php';

$excel2 = PHPExcel_IOFactory::createReader('Excel2007');
$excel2 = $excel2->load('prueba.xlsx'); // Empty Sheet
$excel2->setActiveSheetIndex(0);





$excel2->getActiveSheet()->setCellValue('C8', $cotizacion["capitas"])
->setCellValue('C2', $cotizacion["empresa_nombre"])
->setCellValue('C9', $cotizacion["masa_salarial"])
->setCellValue('B11', $cotizacion["aseguradora_actual"]) 
->setCellValue('B13', $cotizacion["variable"]/100)   
->setCellValue('B14', '0.6')    
->setCellValue('B12', '0');





$letra = 'C';

foreach($propuestas->result_array() as $row) {


  $excel2->getActiveSheet()->setCellValue($letra.'11', $row["nombre"]) 
  ->setCellValue($letra.'13', $row["variable"]/100)   
  ->setCellValue($letra.'14', '0.6')    
  ->setCellValue($letra.'12', '0')
  ->setCellValue($letra.'16', '=C$8*'.$letra.'12+C$9*'.$letra.'13+C$8*'.$letra.'14')
  ->setCellValue($letra.'17','=(B$16-'.$letra.'16)*13')
  ->setCellValue($letra.'18','=1-('.$letra.'16/B16)');
  ++$letra;
}


$objWriter = PHPExcel_IOFactory::createWriter($excel2, 'Excel2007');
$nombreArchivo = 'CuadroComparativo-'.$cotizacion["empresa_nombre"].'.xlsx';

$objWriter->save('uploads/'.$nombreArchivo);
$fileContents = file_get_contents('http://rpm.singleton.com.ar/uploads/'.$nombreArchivo);
//print_r($fileContents);
$this->load->helper('download');
force_download($nombreArchivo, $fileContents);

}

检查浏览器的响应和预览是不可读的。 谢谢!

3 个答案:

答案 0 :(得分:1)

在force_download()函数中设置要发送的数据的MIME类型。浏览器可能正在尝试最好地猜测它,或者只是输出您发送的内容(可能是您所指的'不可读'数据)。

尝试将force_download行更改为:

force_download($nombreArchivo, $fileContents, TRUE);

这将根据文件扩展名(xlsx)设置MIME类型,并强制浏览器下载文件。

答案 1 :(得分:1)

我通过添加ajax的成功函数解决了以下问题:

 success: function(json) {

                    var content = JSON.parse(json);
                    //alert(content);
                    if (content.error) {
                        $('#error').html(content.response);
                        $('#error').show();
                        $('#success').hide();

                    } else {
                      //  alert(content);
                        location.href="http://rpm.singleton.com.ar/uploads/"+content.response;
                        //location.href = "<?php echo site_url('administrador'); ?>/" + content.response;
                    }
                },

在php中我回显文件名。

答案 2 :(得分:0)

试试这段代码:

header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename={$nombreArchivo}.xls");
$this -> load -> view ('view_file',$fileContents);