2014-10-16 2 views
1

Excel 시트를 만들기 위해 PHPExcel을 사용하고 있지만 Ajax 문제가 있습니다. Ajax에서는 Ajax가 성공했을 때 시트를 생성 할 수 없다. 현재 코드에서 Ajax 삽입 시트가 생성되지 않고 매번 옵션 창으로 저장하라는 메시지가 표시됩니다.Ajax로 PHPExcel을 생성하지 않는 PHPExcel

코드 아약스없이 (작업) :

HTML :

<a href="javascript:void(0);" id="create">Create</a> 

jQuery를 아약스 : 아약스 (작동하지 않음)와

/** Error reporting */ 
error_reporting(E_ALL); 
ini_set('display_errors', TRUE); 
ini_set('display_startup_errors', TRUE); 
date_default_timezone_set('Europe/London'); 

define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); 

/** Include PHPExcel */ 
require_once dirname(__FILE__) . '/../Classes/PHPExcel.php'; 

// Create new PHPExcel object 
$objPHPExcel = new PHPExcel(); 

// Create new PHPExcel object 
$objPHPExcel = new PHPExcel(); 

// Create a first sheet, representing sales data 
$objPHPExcel->setActiveSheetIndex(0); 
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Something'); 

// Rename sheet 
$objPHPExcel->getActiveSheet()->setTitle('Name of Sheet 1'); 

// Create a new worksheet, after the default sheet 
$objPHPExcel->createSheet(); 

// Add some data to the second sheet, resembling some different data types 
$objPHPExcel->setActiveSheetIndex(1); 
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'More data'); 

// Rename 2nd sheet 
$objPHPExcel->getActiveSheet()->setTitle('Second sheet'); 

// Set active sheet index to the first sheet, so Excel opens this as the first sheet 
$objPHPExcel->setActiveSheetIndex(0); 


header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="name_of_file_'.date('Y/m/d H:i:s').'.xlsx"'); 
header('Cache-Control: max-age=0'); 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
$objWriter->save('php://output'); 

코드

<script type="text/javascript"> 
    $('#create').click(function() { 

     $.ajax({ 
      type: "POST", 
      url: "http://localhost/testing/PHPExcel_1.8.0_doc/Examples/create.php", 
      data: "", 
      success: function (html) { 

      } 
     });  

    }); 
</script> 

enter image description here

모든 아이디어 :

Create.php

<?php 
    /** Error reporting */ 
    error_reporting(E_ALL); 
    ini_set('display_errors', TRUE); 
    ini_set('display_startup_errors', TRUE); 

    define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); 

    /** Include PHPExcel */ 
    require_once dirname(__FILE__) . '/../Classes/PHPExcel.php'; 

    // Create new PHPExcel object 
    $objPHPExcel = new PHPExcel(); 

    // Create a first sheet, representing sales data 
    $objPHPExcel->setActiveSheetIndex(0); 
    $objPHPExcel->getActiveSheet()->setCellValue('A1', 'Something'); 

    // Rename sheet 
    $objPHPExcel->getActiveSheet()->setTitle('Name of Sheet 1'); 

    // Create a new worksheet, after the default sheet 
    $objPHPExcel->createSheet(); 

    // Add some data to the second sheet, resembling some different data types 
    $objPHPExcel->setActiveSheetIndex(1); 
    $objPHPExcel->getActiveSheet()->setCellValue('A1', 'More data'); 

    // Rename 2nd sheet 
    $objPHPExcel->getActiveSheet()->setTitle('Second sheet'); 

    // Redirect output to a client’s web browser (Excel5) 
    header('Content-Type: application/vnd.ms-excel'); 
    header('Content-Disposition: attachment;filename="name_of_file_'.date('Y/m/d H:i:s').'.xlsx"'); 
    header('Cache-Control: max-age=0'); 
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
    $objWriter->save('php://output'); 
?> 

이 응답을 얻기? 왜 시트가 생성되지 않고 왜 창으로 저장이 열리지 않는지.

감사합니다. 당신이 파일을 생성하는 아약스를 사용하는 경우

+0

Ajax 호출을 사용하여 이와 같은 파일을 다운로드 할 수 없습니다. Google의 "ajax 다운로드 파일"을 사용하여 여러 가지 대체 솔루션을 볼 수 있습니다 (당연히 많은 사람들이 여기에 있습니다) –

답변

1

, 다음 단계를 수행해야합니다 서버/PHP로

  1. 보내기 요청이 파일을 생성 할 수 있습니다. 해당 파일을 & 저장하면 응답으로 파일 이름을 보냅니다.
  2. 성공 콜백에서 파일 이름을 받으면 브라우저를 실제 유전자 파일 (헤더 포함)을 보여주는 PHP 파일로 리디렉션합니다. window.location.href='downloadFile.php?filename=abcd.pdf'
+0

(서버에 파일을 저장할 필요가 없기 때문에) 또는 HTML 문서에 양식 요소 추가 POST에 메소드를 설정하고 PHP 파일에 액션을 설정하고 제출하십시오. –

0

이 시도 :

<script type="text/javascript"> 
    $('#create').click(function() { 

     $.ajax({ 
      url: "", 
      beforeSend: function() { 
      location.href = "http://localhost/testing/PHPExcel_1.8.0_doc/Examples/create.php"; 
      }, 
      success: function (html) { 

      } 
     });  

    }); 
</script> 
0

이 시도 :

PHP 코드 ->의 배열을 반환

 header('Content-Type: application/vnd.ms-excel'); 
     header('Content-Disposition: attachment;filename="'.$filename.'"'); 
     header('Cache-Control: max-age=0'); 


     $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 

     $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); 

     $objWriter->save("php://output"); 
     $xlsData = ob_get_contents(); 
     ob_end_clean(); 

     $objPHPExcel->disconnectWorksheets(); 
     unset($objPHPExcel); 


     $response = array(
      'status' => true, 
      'file' => "data:application/vnd.ms-excel;base64,".base64_encode($xlsData), 
      'log' => $log_mensaje 
     ); 

jQuery 코드

기능 crear_reporte_turno (ID)를 {

var $mensaje = "¿Está seguro de Crear el Reporte del Turno?"; 
    var $form = $('<div></div>'); 
    $form.append('<p>'+$mensaje+'</p>'); 

    BootstrapDialog.show({ 
    title: 'Consulta', 
    //type: BootstrapDialog.TYPE_DANGER, 
    size: BootstrapDialog.SIZE_SMALL, 
    message: $form, 
    autospin: true, 
    buttons: [{ 
     label: 'Continuar', 
     cssClass: 'btn-primary', 
     autospin: true, 
     action: function(dialogRef){ 

      dialogRef.enableButtons(false); 
      dialogRef.setClosable(false); 

      url = '<?php echo $url_ruta_controlador . 'crear_reporte_turno/'; ?>' + id; 

      $.post(url,{'id_turno' : id}, function(respuesta){ 

       dialogRef.close(); 

       var titulo = "Reporte Turno"; 
       var mensaje = ""; 
       var tipo_mensaje = ""; 
       var $form = $('<div></div>'); 

       if(respuesta.status){ 
        mensaje = "Se ha creado el reporte del turno correctamente."; 
        tipo_mensaje = BootstrapDialog.TYPE_SUCCESS; 

        var $a = $("<a>"); 
        $a.attr("href",respuesta.file); 

        $form.append('<p>'+mensaje+'</p>');     
        $form.append($a); 

        var nombre_archivo = "reporte_turno_" + id + ".xls"; 

        $a.attr("download",nombre_archivo); 
        $a[0].click(); 
        $a.remove(); 

        console.log(respuesta.log); 


       } else { 
        mensaje = "Se ha producido un error al crear el reporte del turno."; 
        tipo_mensaje = BootstrapDialog.TYPE_DANGER; 

        $form.append('<p>'+mensaje+'</p>'); 
       } 

       BootstrapDialog.show({ 
        title: titulo, 
        type: tipo_mensaje, 
        message: $form, 
        buttons: [{ 
         label: 'Cerrar', 
         action: function(dialogRef){ 
          dialogRef.close(); 
         } 
        }] 
       }); 

       },'json').fail(function(){ 

       dialogRef.close(); 

       var titulo = "Reporte Turno"; 
       var mensaje = ""; 
       var tipo_mensaje = ""; 
       var $form = $('<div></div>'); 

       mensaje = "Se ha producido un error al crear el reporte del turno."; 
       tipo_mensaje = BootstrapDialog.TYPE_DANGER; 
       $form.append('<p>'+mensaje+'</p>'); 

       BootstrapDialog.show({ 
        title: titulo, 
        type: tipo_mensaje, 
        message: $form, 
        buttons: [{ 
         label: 'Cerrar', 
         action: function(dialogRef){ 
          dialogRef.close(); 
         } 
        }] 
       }); 

       }); 
      return; 
      } 
     }, 
     { 
      label: 'Cancelar', 
      action: function(dialogRef){ 
      dialogRef.close(); 

     } 
     }]  
    }); 
}