2014-10-02 109 views
3

我在Codeigniter中的PHPExcel中遇到问题。我想将数据导出到excel文件。它有10个数据,如下所示:在Codeigniter循环数据阵列中PHPExcel导出为ex​​cel

----------------------------------------------- 
No | NIM | Mahasiswa | Benar | Salah | Nilai 
----------------------------------------------- 
1 | G1A007001 | Hikmah Faridah | 16 | 84 | 16 
----------------------------------------------- 
.. | ..........| .............. |....|....|.... 
----------------------------------------------- 
10 | K1A006001 | Erni Noviani | 0 | 5 | 0 
----------------------------------------------- 

这里是我的控制器:

public function export(){ 
     $id=$this->uri->segment(3); 
     $this->load->model('m_user'); 
     $mhs=$this->m_user->edit_sesi($id); 
     foreach($mhs->result() as $m): 
      $nama_sesi=$m->nama_sesi; 
      $nama_blok=$m->nama_blok; 
      $tgl=$m->tgl; 
     endforeach; 
     $nilai=$this->m_user->lihat_nilai_sesi($id); 
     $heading=array('No','NIM','Mahasiswa','Benar','Salah','Nilai'); 
     $this->load->library('PHPExcel'); 
     //Create a new Object 
     $objPHPExcel = new PHPExcel(); 
     $objPHPExcel->getActiveSheet()->setTitle($nama_sesi); 
     //Loop Heading 
     $rowNumberH = 1; 
     $colH = 'A'; 
     foreach($heading as $h){ 
      $objPHPExcel->getActiveSheet()->setCellValue($colH.$rowNumberH,$h); 
      $colH++;  
     } 
     //Loop Result 
     $totn=$nilai->num_rows(); 
     $no=1; 
     for($i=2;$i<=$totn+1;$i++){ 
      foreach($nilai->result() as $n): 
       $objPHPExcel->getActiveSheet()->setCellValue('A'.$i,$no); 
       $objPHPExcel->getActiveSheet()->setCellValue('B'.$i,$n->nim); 
       $objPHPExcel->getActiveSheet()->setCellValue('C'.$i,$n->nama); 
       $objPHPExcel->getActiveSheet()->setCellValue('D'.$i,$n->benar); 
       $objPHPExcel->getActiveSheet()->setCellValue('E'.$i,$n->salah); 
       $objPHPExcel->getActiveSheet()->setCellValue('F'.$i,$n->nilai); 
      endforeach; 
      $no++; 
     } 
     //Freeze pane 
     $objPHPExcel->getActiveSheet()->freezePane('A2'); 
     //Save as an Excel BIFF (xls) file 
     $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5'); 

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

     $objWriter->save('php://output'); 
     exit(); 
    } 

这是我的模型:

function lihat_nilai_sesi($id){ 
    $this->db->select('*'); 
    $this->db->from('hasil'); 
    $this->db->join('mahasiswa','mahasiswa.username=hasil.username','left'); 
    $this->db->order_by('mahasiswa.nim','asc'); 
    $this->db->where('id_sesi',$id); 
    $query=$this->db->get(); 
    return $query; 
} 

和Excel的结果文件是这样的:

--------------------------------------------- 
No | NIM | Mahasiswa | Benar | Salah | Nilai 
--------------------------------------------- 
1 | K1A006001 | Erni Noviani | 0 | 5 | 0 
--------------------------------------------- 
2 | K1A006001 | Erni Noviani | 0 | 5 | 0 
--------------------------------------------- 
3 | K1A006001 | Erni Noviani | 0 | 5 | 0 
--------------------------------------------- 
4 | K1A006001 | Erni Noviani | 0 | 5 | 0 
--------------------------------------------- 
5 | K1A006001 | Erni Noviani | 0 | 5 | 0 
--------------------------------------------- 
6 | K1A006001 | Erni Noviani | 0 | 5 | 0 
--------------------------------------------- 
7 | K1A006001 | Erni Noviani | 0 | 5 | 0 
--------------------------------------------- 
8 | K1A006001 | Erni Noviani | 0 | 5 | 0 
--------------------------------------------- 
9 | K1A006001 | Erni Noviani | 0 | 5 | 0 
--------------------------------------------- 
10 | K1A006001 | Erni Noviani | 0 | 5 | 0 
--------------------------------------------- 

结果只显示10具有相同数据/人员的行。我认为循环不起作用。任何身体帮助我?

感谢您的关注

+0

insire在foreach加上'的var_dump($ N) '看看它的预期结果 – 2014-10-02 03:39:57

回答

5

解决

这里是我的控制器:

public function export_nilai_sesi(){ 
    $id=$this->uri->segment(3); 
    $this->load->model('m_user'); 
    $mhs=$this->m_user->edit_sesi($id); 
    foreach($mhs->result() as $m): 
     $nama_sesi=$m->nama_sesi; 
     $nama_blok=$m->nama_blok; 
     $tgl=$m->tgl; 
    endforeach; 
    $nilai=$this->m_user->lihat_nilai_sesi($id); 
    $heading=array('No','NIM','Mahasiswa','Benar','Salah','Nilai'); 
    $this->load->library('PHPExcel'); 
    //Create a new Object 
    $objPHPExcel = new PHPExcel(); 
    $objPHPExcel->getActiveSheet()->setTitle($nama_sesi); 
    //Loop Heading 
    $rowNumberH = 1; 
    $colH = 'A'; 
    foreach($heading as $h){ 
     $objPHPExcel->getActiveSheet()->setCellValue($colH.$rowNumberH,$h); 
     $colH++;  
    } 
    //Loop Result 
    $totn=$nilai->num_rows(); 
    $maxrow=$totn+1; 
    $nil=$nilai->result(); 
       $row = 2; 
     $no = 1; 
     foreach($nil as $n){ 
      //$numnil = (float) str_replace(',','.',$n->nilai); 
      $objPHPExcel->getActiveSheet()->setCellValue('A'.$row,$no); 
      $objPHPExcel->getActiveSheet()->setCellValue('B'.$row,$n->nim); 
      $objPHPExcel->getActiveSheet()->setCellValue('C'.$row,$n->nama); 
      $objPHPExcel->getActiveSheet()->setCellValueExplicit('D'.$row,$n->benar,PHPExcel_Cell_DataType::TYPE_NUMERIC); 
      $objPHPExcel->getActiveSheet()->setCellValueExplicit('E'.$row,$n->salah,PHPExcel_Cell_DataType::TYPE_NUMERIC); 
      $objPHPExcel->getActiveSheet()->getStyle('F'.$row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1); 
      $objPHPExcel->getActiveSheet()->setCellValueExplicit('F'.$row,$n->nilai,PHPExcel_Cell_DataType::TYPE_NUMERIC); 
      $row++; 
      $no++; 
     } 
    //Freeze pane 
    $objPHPExcel->getActiveSheet()->freezePane('A2'); 
    //Cell Style 
    $styleArray = array(
     'borders' => array(
      'allborders' => array(
       'style' => PHPExcel_Style_Border::BORDER_THIN 
      ) 
     ) 
    ); 
    $objPHPExcel->getActiveSheet()->getStyle('A1:F'.$maxrow)->applyFromArray($styleArray); 
    //Save as an Excel BIFF (xls) file 
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5'); 

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

    $objWriter->save('php://output'); 
    exit(); 
} 
1

试试这个循环的结果:

$fields = $nilai->list_fields(); 
    $row = 2; 
    foreach($nilai->result() as $data) 
    { 
     $col = 0; 
     foreach ($fields as $field) 
     { 
      $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $data->$field); 
      $col++; 
     } 
     $row++; 
    } 
+0

谢谢你的回答,但我找到了解决方案,这里是我的代码 $ nil = $ nilai-> result(); $ row = 2; $ no = 1; \t \t \t的foreach($零为$ N){ \t \t \t $ objPHPExcel-> getActiveSheet() - > setCellValue( 'A' $行,$无); \t \t \t \t $ objPHPExcel-> getActiveSheet() - > setCellValue('B'。$ row,$ n-> nim); – 2014-10-17 08:20:58

+0

$ objPHPExcel-> getActiveSheet() - > setCellValue('C'。$ row,$ n-> nama); (); $ row,$ n-> benar,PHPExcel_Cell_DataType :: TYPE_NUMERIC);}}}} $ objPHPExcel-> getActiveSheet() - > setCellValueExplicit('E'。$ row,$ n-> salah,PHPExcel_Cell_DataType :: TYPE_NUMERIC);}}} \t \t \t \t $ objPHPExcel-> getActiveSheet() - >对getStyle( 'F' $行。) - > getNumberFormat() - > setFormatCode(PHPExcel_Style_NumberFormat :: FORMAT_NUMBER_COMMA_SEPARATED1); ();} setCellValueExplicit('F'。$ row,$ n-> nilai,PHPExcel_Cell_DataType :: TYPE_NUMERIC);}}}} \t \t \t \t $ row ++; \t \t \t \t $ no ++; \t \t \t} – 2014-10-17 08:22:48

+0

我使用db中的每个数据值设置每个单元格值。 感谢您的回答。 – 2014-10-17 08:24:18