PHP操作Excel表格浅析

18 篇文章 0 订阅
18 篇文章 0 订阅

题目的要求:把订单中的信息放到Excel表格中并且下载到本地,并且循环输出订单中的所有商品。
以下图片是 效果:
这里写图片描述
主要的代码段:

 //获取服务器的绝对路径
  $root1 = I('server.DOCUMENT_ROOT');
   //这里是引用PHPExcel的类,相当于第三方的插件,如果没有,可以百度下载,然后再放到ThinkPHP的库目录中
   import("Org.Excel.PHPExcel"); //__PUBLIC__/PHPExcel/
   $order=D("OrderView");
   //获取orderID
   $orderID =I('get.order_code');
   if ($orderID!="") {
       $where['order_code'] =$orderID;
       $objReader =\PHPExcel_IOFactory::createReader('Excel5');
            $objPHPExcel = $objReader->load($root1.__ROOT__.'/Public/export.xls');  //导入模板打印
        }else{
             $objPHPExcel = new \PHPExcel();
        }
        $objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
            ->setLastModifiedBy("Maarten Balliauw")
            ->setTitle("Office 2007 XLSX Test Document")
            ->setSubject("Office 2007 XLSX Test Document")
            ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
            ->setKeywords("office 2007 openxml php")
            ->setCategory("Test result file");
        $rs=$order->where($where)->select();
        $order_details =getProductDetails($orderID);  //订单下的所有产品信息
        dump($order_details);
        //判断是否有选择的订单,如果没有就打印出所有订单信息,有的话就根据模板输出。
        if ($orderID =="") {
           $i=2;
            $objPHPExcel->setActiveSheetIndex(0)
                        ->setCellValue('A1', '订单编号')
                        ->setCellValue('B1', '交易编号')
                        ->setCellValue('C1', '产品编号')
                        ->setCellValue('D1', '客户名称')
                        ->setCellValue('E1', '交易数量')
                        ->setCellValue('F1', '交易时间')
                        ->setCellValue('G1', '交易状态')
                        ->setCellValue('H1', '登记人')
                        ->setCellValue('I1', '备注信息');
            $objPHPExcel->setActiveSheetIndex(0);
            foreach($rs as $k=>$v){
                $objPHPExcel->setActiveSheetIndex(0)
                            ->setCellValue('A'.$i, $v['order_code'])
                            ->setCellValue('B'.$i, $v['trade_code'])
                            ->setCellValue('C'.$i, $v['product_code'])
                            ->setCellValue('D'.$i, $v['username'])
                            ->setCellValue('E'.$i, $v['trade_num'])
                            ->setCellValue('F'.$i, $v['createtime'])
                            ->setCellValue('G'.$i, $v['order_type'])
                            ->setCellValue('H'.$i, $v['input_user'])
                            ->setCellValue('I'.$i, $v['remark']);
                $i++;
            }
            // $objActSheet->setCellValue('A1', iconv('gbk', 'utf-8', '中文Hello'));    //插入数据
        }else{
/*
       $objReader = PHPExcel_IOFactory::createReader('Excel5');
       $objWriter = $objReader->load($root1.__ROOT__.'/Public/export.xls');
       $objWriter = PHPExcel_IOFactory::createWriter($objWriter, 'Excel5'); 
*/       foreach($rs as $k=>$v){
            $time1 =strtotime($v['createtime']);
            $last_time =date("Y年m月d日",$time1+(21*24*3600));
            $create_time =date("Y-m-d");
            $objPHPExcel->setActiveSheetIndex(0)
                            ->setCellValue('C5', $v['username'])
                            ->setCellValue('F5', $v['order_code'])                    
                            ->setCellValue('F12', $v['total_price'])
                            ->setCellValue('F16', $create_time)
                            ->setCellValue('D14', $last_time)
                            ->setCellValue('I16', $v['input_user']);
            }   
        }
        foreach ($order_details as $k => $v) {
            $objPHPExcel->setActiveSheetIndex(0)
                    ->insertNewRowBefore(11,1)
                    ->setCellValue('C11', $v['product_name'])
                    ->setCellValue('D11', $v['price'])
                    ->setCellValue('E11', $v['product_num'])
                    ->setCellValue('F11', $v['total_price']);
        }

        $objPHPExcel->getActiveSheet()->setTitle('order');//设置sheet标签的名称
        $objPHPExcel->setActiveSheetIndex(0);

        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');     

        ob_end_clean();  //清空缓存 
        //设置header的相关参数
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
        header("Content-Type:application/force-download");
        header("Content-Type:application/vnd.ms-execl");
        header("Content-Type:application/octet-stream");
        header("Content-Type:application/download");
        header('Content-Disposition:attachment;filename='.date("YmdHis").'.xls');//设置文件的名称
        header("Content-Transfer-Encoding:binary");
        $objWriter->save('php://output');   //下载Excel表格
        exit;

以上就是Excel表打印的核心代码,如果继续深入研究,可以查看PHPExcel插件中函数,都有例子说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值