您现在的位置是:首页 PHP

ThinkPHP3.2.3 导出操作实例

博主 添加时间:2017-03-13 16:36:37 【PHP】 热度:700人已围观

22222222.gif

1,加载第三方类库PHPExcel   点击下载  PHPExcel.zip


2,在TP的function.php中写入这个方法

/**
 * @desc 导出excel文件的方法
 * @param $data 导出的数据
 * @param $title 导出文件的文件名称
 * @param array $titles 导出数据的列表头名称
 */

 function  extraExcel($data,$title,$titles){

        $colls = count($titles);      //共有多少列
        reset($titles);               //将键指向titles数组的首部

        // /** PHPExcel */
        // require_once WWW.'/libs/PHPExcel.php';
        vendor("PHPExcel");
        // /** PHPExcel_IOFactory */
        // require_once WWW.'/libs/PHPExcel/IOFactory.php';

        //Create new PHPExcel object   创建一个处理对象实例
        $objPHPExcel = new PHPExcel();

        // Add some data
        $index='A';
        //设置当前的sheet索引,用于后续的内容操作。一般只有在使用多个sheet的时候才需要显示调用。缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0
        $sheet = $objPHPExcel->setActiveSheetIndex(0);

        //设置单元格的值  设置第一行显示的列标题
        $sheet->setCellValue('A1',$title);

        //设置第二行显示的各项标题
        $fcode = 'A';
        for($i=0;$i<$colls;$i++){
            $col = chr(ord($fcode)+$i);
            if($i>25){
                $ccol = chr(ord($fcode)+($i-26));
                $col = 'A'.$ccol;
            }
            $sheet->setCellValue($col.'2',$titles[key($titles)]);
            next($titles);
        }
        //设置下边的数据显示项
        $code='A';
        $row = 3;
        foreach($data as $key => $val){
            reset($titles);
            for($j=0;$j<$colls;$j++){
                $col = chr(ord($code)+$j);
                if($j>25){
                    $ccol = chr(ord($code)+($j-26));
                    $col = 'A'.$ccol;
                }
                $sheet->setCellValue($col.$row,$data[$key][key($titles)]);
                next($titles);
            }
            $row ++;
        }
        //获取最后一行是第几行
        $lastrow = count($data)+3;    //最后一行是第几行 数据的条数加头部三行

        $last_code = 'B';
        //Rename sheet 设置当前活动sheet的名称
        //$objPHPExcel->getActiveSheet()->setTitle($title);

        //设置宽度
        $last = 'A';
        for($i=0;$i<$colls;$i++){
            $co = chr(ord($last)+$i);
            if($i>25){
                $ccol = chr(ord($last)+($i-26));
                $co = 'A'.$ccol;
            }
            $objPHPExcel->getActiveSheet()->getColumnDimension($co)->setWidth
(20);
        }
        //最后一列的字母
        $allcol = chr(ord($last_code)+$colls-2);
        if($colls>26){
            $ccol = chr(ord($last_code)+($colls-28));
            $allcol = 'A'.$ccol;
        }

        //合并单元格
        $objPHPExcel->getActiveSheet()->mergeCells('A1:'.$allcol.'1');

        //设置字体大小
        $cod = 'A';
        for($i=0;$i<$colls;$i++){
            $co = chr(ord($cod)+$i);
            if($i>25){
                $ccol = chr(ord($cod)+($i-26));
                $co = 'A'.$ccol;
            }
            $objPHPExcel->getActiveSheet()->getStyle($co.'2')->getFont()->setSize(10);
        }

        //设置填充颜色
        $objStyleA1 = $objPHPExcel->getActiveSheet()->getStyle('A1');
    $objFillA1 = $objStyleA1->getFill();
    $objFillA1->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objFillA1->getStartColor()->setARGB('FFEEEEEE');
        //设置对齐方式
        $objAlignA1 = $objStyleA1->getAlignment();
        $objAlignA1->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objAlignA1->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
        //第二行设置背景颜色
        $objStyleA2 = $objPHPExcel->getActiveSheet()->getStyle('A2');
    $objFillA2 = $objStyleA2->getFill();
    $objFillA2->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objFillA2->getStartColor()->setARGB('FFEEEEEE');
        //第二行设置对齐方式
        $objAlignA2 = $objStyleA2->getAlignment();
        $objAlignA2->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objAlignA2->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
        //第二行设置边框
        $objBorderA2 = $objStyleA2->getBorders();
        $objBorderA2->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

        $objBorderA2->getBottom()->setBorderStyle
(PHPExcel_Style_Border::BORDER_THIN);
        $objBorderA2->getLeft()->setBorderStyle
(PHPExcel_Style_Border::BORDER_THIN);
        $objBorderA2->getRight()->setBorderStyle
(PHPExcel_Style_Border::BORDER_THIN);
        //重复样式
        $objPHPExcel->getActiveSheet()->duplicateStyle($objStyleA2,'A2:'.
$allcol.'2');

        //设置数据行的对齐方式
        $objStyleA3 = $objPHPExcel->getActiveSheet()->getStyle('A3:'.$allcol.
$lastrow);
        $objAlignA3 = $objStyleA3->getAlignment();
        $objAlignA3->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objAlignA3->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
        //设置行高
        $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(30);

        //Set active sheet index to the first sheet, so Excel opens this as the first sheet
        $objPHPExcel->setActiveSheetIndex(0);
        $filename=$title;
        $filename=iconv('utf-8','gbk',$filename);
        $G_format = 'Excel5';

        if($G_format=='Excel5'){
            // Redirect output to a client’s web browser (Excel5)
            ob_end_clean();//清除缓冲区,避免乱码
            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename="'.
$filename.'.xls"');
            header('Cache-Control: max-age=0');

            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,
'Excel5');
            $objWriter->save('php://output');
        }else{
            header('Content-Type: application/vnd.openxmlformats-
officedocument.spreadsheetml.sheet');
            header('Content-Disposition: attachment;filename="'.
$filename.'.xlsx"');
            header('Cache-Control: max-age=0');

            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,
'Excel2007');
            $objWriter->save('php://output');
        }
        exit;
}


3,在html中选择你要导出的数据

    例如:点击下载   exp.html.zip


4,在PHP文件中做处理,例如:(只供参考)

Public function orderexp(){
            $idres = explode(',',$_GET['id']);
            $title = date("Y-m-d").'订单下载';
           foreach ($idres as $k => $v) {
                $orderInfo = M("order")->where("id = '{$v}' ")->find();
               # code...
            $data[$k]['id']             = $v;
            $data[$k]['order_no']       = $orderInfo['order_no'];
            $data[$k]['order_name']     = $orderInfo['order_name'];
            $data[$k]['order_price']    = $orderInfo['order_price'];
            $data[$k]['pay_stauts']     = M("dict")->where("id = ".$orderInfo['pay_stauts']." ")->cache(true)->getField('name');
            $data[$k]['pay_type']       = M("dict")->where("id = ".$orderInfo['pay_type']." ")->cache(true)->getField('name');
            $data[$k]['status']         = M("dict")->where("id = ".$orderInfo['status']." ")->cache(true)->getField('name');
            $data[$k]['realname']       = $orderInfo['realname'];
            $data[$k]['ctime']          = $orderInfo['ctime'];
           }
            // dump($data);die;
            $headerarr=array(
                'id'=>'ID',
                'order_no'=>'编号',
                'order_name'=>'订单名字',
                'order_price'=>'金额',
                'pay_stauts'=>'订单状态',
                'pay_type'=>'支付方式',
                'status'=>'发货状态',
                'realname'=>'客户姓名',
                'ctime'=>'订单时间',
            );

        extraExcel($data,$title,$headerarr); 
    }


OK 上面配置完成就可以 进行导出了

  • 相关文章
  • Mac 如何关闭自带的Apache

    安装XAMPP后,启动服务时提示Apache启动失败,80端口被占用.查看进程发现存在几个httpd. OS X自带Apache,可是默认是没有启动的.我也没有开启Web共享,怎么就开机启动了呢? 不知道是不是因为安装了别的什么软件导致的.一般的开机启动项可以在System Preferences–Users&Groups–Login Items中添加或删除.可是在这里也没有发现Apache相关的启动项.于是谷歌到了下面一个可行的方法,打开终端,执行下面的命令.

  • LNMP环境下WordPress网站二级目录伪静态设置

    今天在给客户网站做二级目录的分类,网站一直报错404,显示应该是伪静态问题。看了下LNMP环境里的WordPress规则,貌似没有支持二级目录的。所以只好自己加一个了。目前VPS主机中使用LNMP一键安装包搭建的环境都没有带二级目录的规则。有需要的朋友可以复制下面的代码,可以让wordpress完美使用伪静态的设置。找到”/usr/local/nginx/conf/wordpress.conf”文件,然后添加:

  • 一个程序员的自白:我为什么写博客

    尝试和接触的知识一多, 便发现自己的脑袋跟硬盘相比, 速度和精准度上都差得不止一星半点. 事情越来越多, 且没有交集, 所有的知识点都零散的分布在脑袋的不同次元, 想要回忆起来特别困难. 一度让我觉得, 学越来越多的东西根本就是一个错误, 正确的方式应该是瞅准一个东西, 精益求精. 虽然这么想, 但是工作不是你想不做就不做的.

  • PHP中把stdClass Object转array的几个方法

    我们在经常使用API接口获取数据返回json数值的时候,往往单纯通过json_decode方法解析获得得数值一般并非数组,而是带有stdClass Objec的对象字符串,这时如果我们想获取相应的PHP数组时,需通过以下几种方法来获取。

  • PHP验证类库_收集开发常用验证方法

    我们在开发项目的时候往往会通过PHP的正则方式来判断用户所输入的信息是否合格或者正确,下面我给大家收集和整理成一个类,供大家参考和使用。如有问题请留言谈论。

文章评论

博客名片

职业:PHP程序员

现居:河南省-洛阳市

博客地址:www.lizongyang.cn

Email:5708837@qq.com

站点信息

  • 建站时间:2019-03-25
  • 网站程序:李宗洋博客
  • 联系电话:15888888888
  • 文章统计4084篇文章
  • 标签管理标签云
  • 微信公众号:扫描二维码,关注我们

打赏本站

  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!
  • 微信扫码:你说多少就多少~
  • 支付宝扫码:你说多少就多少~

客服在线

服务时间

周一至周日 9:00-21:00