2017-07-16 42 views
1

我遇到以下問題: 我使用代碼點火器作爲php框架,並從我的一個視圖中對一個函數執行ajax調用,該函數使用PHPExcel生成和xlsx文件,來自mysql數據庫的數據。該文件在服務器上正確創建,但當我嘗試force_download時,它不會下載任何東西。這裏是PHP函數:從代碼點火器中從控制器下載excel文件

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); 

}

從檢查瀏覽器的響應和預覽不可讀。 謝謝!

回答

1

爲在force_download()函數中發送的數據設置MIME類型。瀏覽器可能會試圖最好地猜測它,或者只是輸出你發送的內容(這可能是你指的'不可讀'的數據)。

試着改變你的force_download行:

force_download($nombreArchivo, $fileContents, TRUE); 

這將設置根據您的文件擴展名(XLSX)的MIME類型,與應強制瀏覽器下載文件。

+0

當我向force_download添加TRUE時,ajax請求返回錯誤。 –

0

試試這個代碼:

header('Content-Type: application/vnd.ms-excel'); 
header("Content-Disposition: attachment; filename={$nombreArchivo}.xls"); 
$this -> load -> view ('view_file',$fileContents); 
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我贊同的文件名。

相關問題