2016-08-22 54 views
3

使Excel文件,我有这样的AJAX功能将数据发送到PHPExcel:使用PHPExcel和AJAX

$("#btn_excel").on('click',function(e){ 
     var test = "This is my Var"; 

     $.ajax({ 
       type: "POST", 
       url: "<?php echo site_url('con_atk/excel_pembebanan'); ?>", 
       cache: false, 
       data: test, 
       success: function(response) 
       { 
        window.open('<?php echo site_url('con_atk/excel_pembebanan'); ?>','_blank'); 
       } 
     }); 
}); 

这是我的控制器:

public function excel_pembebanan() 
    {  
     $this->load->library('Excel'); 

     $val = $this->input->post('data'); 

     $this->excel->setActiveSheetIndex(0); 
     $this->excel->getActiveSheet()->setTitle('Laporan Pembebanan'); 


     $this->excel->getActiveSheet()->setCellValue('A1', $val); 
     $this->excel->getActiveSheet()->getStyle('A1')->getFont()->setSize(20); 


     $this->excel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true); 
     $filename= "cabe.xls'"; 
     header('Content-Type: application/vnd.ms-excel'); 
     header('Content-Disposition: attachment;filename="'.$filename.'"'); 
     header('Cache-Control: max-age=0'); 
     $objWriter = PHPExcel_IOFactory::createWriter($this->excel, 'Excel5'); 
     $objWriter->save('php://output'); 
    } 

的代码生成成功Excel文件。但是在单元格中写入的值是“FALSE”。值应该是“这是我的Var”。

什么是错的代码?任何帮助是极大的赞赏。

+0

首先检查$ val = $ this-> input-> post('data'); $ val是否包含任何值? –

+4

它应该是'数据:{“数据”:测试}'你期望的方式,我想。 – Ekin

+0

@Mayank:有没有简单的方法来检查$ VAL在控制器? – Vahn

回答

0

这是一个相当古老的问题,所以你可能已经解决了这个问题,但是从看代码,它看起来像你期待你的帖子阵列包含一个域又称为数据还没有上传与这名求什么。您的整个发布内容只包含短语“这是我的Var”,因此根本没有任何名称可以引用它。如果你不希望我们整理一下你发送你的数据,然后顺便试试修改:

$val = $this->input->post('data'); 

到:

$val = file_get_contents('php://input'); 

这会给你的原贴这应该只是数据你发送的字符串。如果你喜欢的东西一点点整洁然后改变你的AJAX调用:

$.ajax({ 
       type: "POST", 
       url: "<?php echo site_url('con_atk/excel_pembebanan'); ?>", 
       cache: false, 
       data: { 'data' : test }, 
       contentType: 'application/json; charset=utf-8', 
       success: function(response) 
       { 
        window.open('<?php echo site_url('con_atk/excel_pembebanan'); ?>','_blank'); 
       } 
     }); 

,然后让你的控制器中的$ VAL分配阅读:

$val = json_decode(trim(file_get_contents('php://input')), true); 

那么就意味着你可以写该单元格与:

$this->excel->getActiveSheet()->setCellValue('A1', $val['data']);