利用PHPExcel导出数据到excel

来源:互联网 发布:nba2konline作弊软件 编辑:程序博客网 时间:2024/05/22 04:48

项目中有个情景是,导出学生的成绩列表为excel格式的,在网上查了下,发现用PHPExcel的很多,于是下了个,看了下文档,调了出了来。


这里记录下,用的是thinkphp的,先把PHPExcel库下下来,放到项目里/Lib/ORG/目录下,我的是/Lib/ORG/PHPExcel



下面的图web页面上展示的



看了图之后,应该就知道到excel怎么展示了吧,下面是代码

  1. public function excel() {  
  2.   
  3.     $data = $this->getExamInfo();  
  4.   
  5.     // 所教学科id  
  6.     $subject = D('Exam')->getTeacherInfo($this->authInfo);  
  7.     $list = M('Score')->where(array('acp_id' => intval($_GET['id'])))->order('sc_rank ASC')->select();  
  8.     $auth = getDataByArray('Auth'$list'a_id''a_id,a_nickname');  
  9.   
  10.     foreach ($list as &$value) {  
  11.         $value['a_nickname'] = $auth[$value['a_id']]['a_nickname'];  
  12.     }  
  13.   
  14.     import('@.ORG.PHPExcel.PHPExcel');  
  15.   
  16.     // Create new PHPExcel object    
  17.     $objPHPExcel = new PHPExcel();  
  18.     // Set properties    
  19.     $objPHPExcel->getProperties()->setCreator("ctos")  
  20.             ->setLastModifiedBy("ctos")  
  21.             ->setTitle("Office 2007 XLSX Test Document")  
  22.             ->setSubject("Office 2007 XLSX Test Document")  
  23.             ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")  
  24.             ->setKeywords("office 2007 openxml php")  
  25.             ->setCategory("Test result file");  
  26.   
  27.     // set width    
  28.     $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);  
  29.     $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);  
  30.     $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);  
  31.     $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);  
  32.   
  33.     // 设置行高度    
  34.     $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(22);  
  35.   
  36.     $objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(20);  
  37.   
  38.     // 字体和样式  
  39.     $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);  
  40.     $objPHPExcel->getActiveSheet()->getStyle('A2:D2')->getFont()->setBold(true);  
  41.     $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);  
  42.   
  43.     $objPHPExcel->getActiveSheet()->getStyle('A2:D2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
  44.     $objPHPExcel->getActiveSheet()->getStyle('A2:D2')->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);  
  45.   
  46.     // 设置水平居中    
  47.     $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
  48.     $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
  49.     $objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
  50.     $objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
  51.     $objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);  
  52.   
  53.     //  合并  
  54.     $objPHPExcel->getActiveSheet()->mergeCells('A1:D1');  
  55.   
  56.     // 表头  
  57.     $objPHPExcel->setActiveSheetIndex(0)  
  58.             ->setCellValue('A1'$data['examTitle'])  
  59.             ->setCellValue('A2''序号')  
  60.             ->setCellValue('B2''姓名')  
  61.             ->setCellValue('C2''班级')  
  62.             ->setCellValue('D2''成绩');  
  63.   
  64.     // 内容  
  65.     for ($i = 0, $len = count($list); $i < $len$i++) {  
  66.         $objPHPExcel->getActiveSheet(0)->setCellValue('A' . ($i + 3), $list[$i]['sc_rank']);  
  67.         $objPHPExcel->getActiveSheet(0)->setCellValue('B' . ($i + 3), $list[$i]['a_nickname']);  
  68.         $objPHPExcel->getActiveSheet(0)->setCellValue('C' . ($i + 3), $data['title']);  
  69.         $objPHPExcel->getActiveSheet(0)->setCellValue('D' . ($i + 3), $list[$i]['sc_point']);  
  70.         $objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 3) . ':D' . ($i + 3))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);  
  71.         $objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 3) . ':D' . ($i + 3))->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);  
  72.         $objPHPExcel->getActiveSheet()->getRowDimension($i + 3)->setRowHeight(16);  
  73.     }  
  74.   
  75.     // Rename sheet    
  76.     $objPHPExcel->getActiveSheet()->setTitle($data['examTitle']);  
  77.   
  78.     // Set active sheet index to the first sheet, so Excel opens this as the first sheet    
  79.     $objPHPExcel->setActiveSheetIndex(0);  
  80.   
  81.     // 输出  
  82.     header('Content-Type: application/vnd.ms-excel');  
  83.     header('Content-Disposition: attachment;filename="' . $data['examTitle'] . '.xls"');  
  84.     header('Cache-Control: max-age=0');  
  85.   
  86.     $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel'Excel5');  
  87.     $objWriter->save('php://output');  
  88. }  

页面上调用的js方法是

  1. // 导出  
  2.         $('.export').click(function () {  
  3.             location.href = '/Class/excel/id/' + cla;  
  4.         })  

运行后,生成的excel文件为



原创粉丝点击