【问题标题】:export to Excel by PHPExcel and Codeigniter and Ajax通过 PHPExcel 和 Codeigniter 和 Ajax 导出到 Excel
【发布时间】:2017-06-18 12:56:30
【问题描述】:

我想通过 PHPExcel 导出 xls 并使用 Codeigniter 和 AJAX,但是我没有得到任何文件,请帮助我

按钮的 HTML 代码:

<button class="buttonExcel" id="ButtonExcel" onclick="getExcel()" ></button>

我的 AJAX 代码运行良好,但没有为我创建任何文件:

<script>
function getExcel()
    {
        $.ajax({
                       url:'<?=base_url();?>tops/posts/create_result',
                       destroy: true,
                       type: 'POST',
                       data: '',
                       beforeSend: function() {
                          $("#ButtonExcel").removeClass("buttonExcel");
                          $("#ButtonExcel").addClass("buttonExcel-getExcel");
                          $("#ButtonExcel").blur();
                       },
                       success: function(response){


                               window.open('<?=base_url();?>tops/posts/create_result','_blank');
                    },
                        error: function(){
                            alert("error when get data");

                        }
                });
        }

</script>

我的控制器在没有 ajax 的情况下运行良好:

 public function create_result()
   {

         set_time_limit(600);
         $this->load->model('tops/Posts_model');
         $list = $this->Posts_model->create_result(); 


         require(APPPATH."third_party/PHPExcel-1.8/Classes/PHPExcel.php");
         require(APPPATH."third_party/PHPExcel-1.8/Classes/PHPExcel/Writer/Excel5.php");

         $objPHPExcel = new PHPExcel();

         $objPHPExcel->getProperties()->setCreator("");
         $objPHPExcel->getProperties()->setLastModifiedBy("");
         $objPHPExcel->getProperties()->setTitle("");
         $objPHPExcel->getProperties()->setSubject("");
         $objPHPExcel->getProperties()->setDescription("");

         $objPHPExcel->setActiveSheetIndex(0);

         $sheet = $objPHPExcel->getActiveSheet();

         $sheet->setCellValue("A1","text");
         $sheet->setCellValue("B1","time");
         $sheet->setCellValue("C1","date");
         $sheet->setCellValue("D1","type");
         $sheet->setCellValue("E1","view");

         $row = 2;

         foreach ($list as $key => $value)
         {

             $sheet->setCellValue("A".$row,$value['MsgText']);
             $sheet->setCellValue("B".$row,$value['MsgTime']);
             $sheet->setCellValue("C".$row,$value['MsgDate']);
             $sheet->setCellValue("D".$row,$value['MsgType']);
             $sheet->setCellValue("E".$row,$value['CountView']);
             $row++;
             }

         $filename = "Task-Exportet-on-".date("Y-m-d-H-i-s").".xls";
         $sheet->setTitle("Task-Overview");

         header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); //mime type
        header('Content-Disposition: attachment;filename="'.$filename.'"'); //tell browser what's the file name
        header('Cache-Control: max-age=0');


        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  
                //force user to download the Excel file without writing it to server's HD
        $objWriter->save('php://output');
        set_time_limit(30);
        exit;
    }

【问题讨论】:

  • 你会为此发布答案吗?我遇到了同样的问题,没有得到任何解决方案。

标签: php ajax codeigniter phpexcel


【解决方案1】:

代码看起来和工作正常,唯一的原因是您无法获取文件是允许在您的浏览器中弹出窗口。

【讨论】:

  • 此问题与 POP-UP 无关,但我激活了 POP-UP,当我运行此页面时,AJAX 代码的错误部分正在运行并向我显示 1 个警报,该警报位于错误 ajax在浏览器控制台中为create_result()函数只是显示:ðï¡¡;;þÿþÿþÿÿÿõöרùùûüðßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>>
【解决方案2】:

我通过在控制器中将此标头替换为旧标头来解决此问题:

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");;
header("Content-Disposition: attachment;filename=$filename");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2015-06-17
    相关资源
    最近更新 更多