ThinkPHP 导出数据到Execel文件中

<a href="__APP__/Admin/Export/exptp">导出信息</a>
 
<?php
namespace Admin\Controller;
use Think\Controller;
class ExportController extends AllowController {

   public function exptp(){
      // $p_name = $_POST['order_p_name'];
      $m = M ('tablename');
      // $datas['order_p_name'] = $p_name;
      $data = $m->field('字段1','字段2')->select();
      // print_r($data);
      // die();
      //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
      import("Org.Util.PHPExcel");
      import("Org.Util.PHPExcel.Writer.Excel5");
      import("Org.Util.PHPExcel.IOFactory.php");
      $filename="test_excel";
      $headArr=array("中文","中文字段1","字段2");

      $this->getExcels($filename,$headArr,$data);
   }

   public function daochu(){//不大于26个字段
      //$zzmm = $_GET['zzmm'];
      $where['political']=$political;
      $m = M ('pgm_jz_jbmb');
      $data = $m->field('id,rid,name,sex,nation)->where($where)->select();
      echo $m->getLastsql();
      exit();
      //$data = $m->field('id,rid,name,sex,nation,csrq,education,political,health,wgqk,phone,zyzpyy,pklb,sfwf,ldmj,jtrks,ldlrs,sfydbq,gdmj,2016rjsr,2017rjsr,2018rjsr,2019rjsr,2020rjsr')->where($where)->select();
      //$data = $m->field('id,rid,name,sex,nation,csrq,education,political,health,wgqk,phone,zyzpyy,pklb,sfwf,ldmj,jtrks,ldlrs,sfydbq,gdmj,2016rjsr')->where($where)->select();
      $q='\'';
      
      foreach ($data as $k => $v)
      {
         $data[$k]['idcard']=$q.$v['idcard'];
      }
      //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
      import("Org.Util.PHPExcel");
      import("Org.Util.PHPExcel.Writer.Excel5");
      import("Org.Util.PHPExcel.IOFactory.php");
      $filename="dy_excel";
      $headArr=array("ID","网格ID","姓名","性别","民族");
   
      $this->getExcel($filename,$headArr,$data);
   }

   private function getExcel($fileName,$headArr,$data){
      //对数据进行检验
      if(empty($data) || !is_array($data)){
         die("data must be a array");
      }
      //检查文件名
      if(empty($fileName)){
         exit;
      }

      $date = date("Y_m_d",time());
      $fileName .= "_{$date}.xls";
      //创建PHPExcel对象,注意,不能少了\
      $objPHPExcel = new \PHPExcel();
      $objProps = $objPHPExcel->getProperties();

      //设置表头
      $key = ord("A");
      foreach($headArr as $v){
         $colum = chr($key);
         $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
         $key += 1;
      }
      $column = 2;
      $objActSheet = $objPHPExcel->getActiveSheet();
      foreach($data as $key => $rows){ //行写入
         $span = ord("A");
         foreach($rows as $keyName=>$value){// 列写入
            $j = chr($span);
            $objActSheet->setCellValue($j.$column,  $value);
            $span++;
         }
         $column++;
      }
      $fileName = iconv("utf-8", "gb2312", $fileName);
      //重命名表
      // $objPHPExcel->getActiveSheet()->setTitle('test');
      //设置活动单指数到第一个表,所以Excel打开这是第一个表
      $objPHPExcel->setActiveSheetIndex(0);
      ob_end_clean();
      ob_start();
      header('Content-Type: application/vnd.ms-excel');
      header("Content-Disposition: attachment;filename=\"$fileName\"");
      header('Cache-Control: max-age=0');
      $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
      $objWriter->save('php://output'); //文件通过浏览器下载
      exit;

   }



   public function getExcels($fileName,$headArr,$data){

//$headArr, 设置的表头

//$data 传过来的需要导出的数据 二维数组

      $date = date("Y_m_d",time());
      $fileName .= "_{$date}.xls";

      //创建PHPExcel对象,注意,不能少了\
      $objPHPExcel = new \PHPExcel();
      $objProps = $objPHPExcel->getProperties();

      //设置表头 超过26      $key = 0;
      foreach($headArr as $v){
         //注意,不能少了。将列数字转换为字母\
         $colum = \PHPExcel_Cell::stringFromColumnIndex($key);
         $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
         $key += 1;
      }

      //设置表头
      /* $key = ord("A");
         //print_r($headArr);exit;
         foreach($headArr as $v){
             $colum = chr($key);
             $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
             $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
             $key += 1;
         }*/
      $column = 2; //从第二行写入数据 第一行是表头
      $objActSheet = $objPHPExcel->getActiveSheet();
      //print_r($data);exit;
      /*foreach($data as $key => $rows){ //行写入
            $span = ord("A");
            foreach($rows as $keyName=>$value){// 列写入
                $j = chr($span);
                $objActSheet->setCellValue($j.$column, $value);
                $span++;
            }
            $column++;
        }*/
      foreach($data as $key => $rows){ //行写入
         $span = 0;
         foreach($rows as $keyName=>$value){// 列写入
            $j = \PHPExcel_Cell::stringFromColumnIndex($span);
            $objActSheet->setCellValue($j.$column, $value);
            $span++;
         }
         $column++;
      }

      $fileName = iconv("utf-8", "gb2312", $fileName);

      /*  //重命名表
         $objPHPExcel->getActiveSheet()->setTitle($date);
         //设置字体大小
         $objPHPExcel->getDefaultStyle()->getFont()->setSize(14);
         //设置单元格宽度
         $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
         //设置默认行高
         $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(23);
 */

      //重命名表
      //$objPHPExcel->getActiveSheet()->setTitle('test');
      //设置活动单指数到第一个表,所以Excel打开这是第一个表
      $objPHPExcel->setActiveSheetIndex(0);
      ob_end_clean();//清除缓冲区,避免乱码
      header('Content-Type: application/vnd.ms-excel');
      header("Content-Disposition: attachment;filename=\"$fileName\"");
      header('Cache-Control: max-age=0');
      $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
      $objWriter->save('php://output'); //文件通过浏览器下载
      exit;


   }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值