• 关于报表导出,phpexcel的使用


    一、方法一

    控制器  

         

    调用的公共方法

    /*
     * excel导出配置
     */
    public function excelAction($filename, $title, $expCellName, $expTableData)
    {
        $xlsTitle = iconv('utf-8', 'gb2312', '');#编码转换
        $fileName = date($filename . '_Ymd'); #文件名称可根据自己情况设定
        $cellNum = count($expCellName);
        $dataNum = count($expTableData);
        #引入phpexcel类
        require_once(SKIHAT_PATH_VENDOR . '/php-excel/PHPExcel/IOFactory.php');
        #实例化
        $objPHPExcel = new PHPExcel();
        $cellName = array();
        foreach ($expCellName as $key => $exp) {
            $cellName[$key] = $exp[0];
        }
        #合并单元格
        $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:' . $cellName[$cellNum - 1] . '1');
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $title);
        #设置font
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getFont()->setSize(16);
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getFont()->setBold(true);
        #设置居中(上下左右)
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
    
        for ($i = 0; $i < $cellNum; $i++) {
            #居中
            $objPHPExcel->setActiveSheetIndex(0)->getStyle($cellName[$i])->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            $objPHPExcel->setActiveSheetIndex(0)->getStyle($cellName[$i])->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
            #给字段标题赋值
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i] . '2', $expCellName[$i][1]);
            #设置宽度
            $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension($cellName[$i])->setWidth(15);
            #设置font
            $objPHPExcel->setActiveSheetIndex(0)->getStyle($cellName[$i] . '2')->getFont()->setSize(12);
            $objPHPExcel->setActiveSheetIndex(0)->getStyle($cellName[$i] . '2')->getFont()->setBold(true);
        }
        if ($dataNum > 0) {
            for ($i = 0; $i < $dataNum; $i++) {
                for ($j = 0; $j < $cellNum; $j++) {
                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$j] . ($i + 3), ' ' . $expTableData[$i][$expCellName[$j][2]]);
                }
            }
        }
        ob_end_clean();
        header('pragma:public');
        header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . $xlsTitle . '.xls"');
        header("Content-Disposition:attachment;filename=$fileName.xls");#attachment新窗口打印inline本窗口打印
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        exit;
    }

     

    二、方法二

    1.控制器获取数据 进行数据重组

     /**
         * 库存报表的excel导出
         */
        public function excelAction()
        {
            $trackingReports = $this->indexAction();
    
            #重组数据
            foreach ($trackingReports as $key => $trackingReport) {
                $trackingReports[$key]['createdTime'] = date('Y-m-d H:i:s', $trackingReport['created']);
                $trackingReports[$key]['orderStatus'] = SaleOrder::statusWithName($trackingReport['order_status']);
                $trackingReports[$key]['salePrice'] = number_format($trackingReport['sale_price'] / 100, 2);
                $trackingReports[$key]['price'] = number_format($trackingReport['sale_price'] * $trackingReport['sale_num'] / 100, 2);
                $trackingReports[$key]['unOutBatchNum'] = $trackingReport['sale_num'] - $trackingReport['packageSkuNum'];
                $trackingReports[$key]['unOutBatchPrice'] = number_format(($trackingReport['sale_num'] - $trackingReport['packageSkuNum']) * $trackingReport['sale_price'] / 100, 2);
                if ($trackingReport['shipped'] != 0) {
                    $trackingReports[$key]['outedTime'] = date('Y-m-d', $trackingReport['shipped']);
                }
            }
    
            $this['trackingReports'] = $trackingReports;
        }
    

      

    2.view页面代码

    <?php
        $this->helpers('core');
        require_once(SKIHAT_PATH_VENDOR . '/php-excel/PHPExcel.php');
    
        $objExcel = new PHPExcel();
        $objExcel->getProperties()
            ->setCreator('jlt-erp')
            ->setLastModifiedBy('jlt-erp')
            ->setTitle('销售订单跟踪报表信息')
            ->setKeywords('销售订单跟踪报表信息')
            ->setDescription('销售订单跟踪报表信息')
            ->setSubject('销售订单跟踪报表信息');
    
        $title = '销售订单跟踪报表信息'; //文件标题
        $fileName = date('销售订单跟踪报表信息 _Ymd');
    
        $sheet = $objExcel->setActiveSheetIndex(0);
    
        $sheet->setCellValue('A2', '商品编号');
        $sheet->setCellValue('B2', '商品名称');
        $sheet->setCellValue('C2', '单位');
        $sheet->setCellValue('D2', '订单日期');
        $sheet->setCellValue('E2', '订单编号');
    
        $sheet->setCellValue('F2', '客户姓名');
        $sheet->setCellValue('G2', '客户电话');
        $sheet->setCellValue('H2', '订单状态');
        $sheet->setCellValue('I2', '商品数量');
        $sheet->setCellValue('J2', '含税单价');
    
        $sheet->setCellValue('K2', '销售额');
        $sheet->setCellValue('L2', '未出库数量');
        $sheet->setCellValue('M2', '未出库金额');
        $sheet->setCellValue('N2', '出库单号');
        $sheet->setCellValue('O2', '出库时间');
        $sheet->setCellValue('P2', '备注');
    
        #合并单元格
        $objExcel->setActiveSheetIndex(0)->mergeCells('A1:P1' );
        $objExcel->setActiveSheetIndex(0)->setCellValue('A1', $title);
        #设置font
        $objExcel->setActiveSheetIndex(0)->getStyle('A1')->getFont()->setSize(16);
    
        #设置居中(上下左右)
        $objExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
    ?>
    <?php
        $rows = 3;
        foreach ($this['trackingReports'] as $item) {
            $sheet->setCellValue("A{$rows}", " ".$item['sku_id']);
            $sheet->setCellValue("B{$rows}", " ".$item['sku_name']);
            $sheet->setCellValue("C{$rows}", " ".$item['sale_unit']);
            $sheet->setCellValue("D{$rows}", " ".$item['createdTime']);
            $sheet->setCellValue("E{$rows}", " ".$item['order_sn']);
    
            $sheet->setCellValue("F{$rows}", " ".$item['cust_name']);
            $sheet->setCellValue("G{$rows}", " ".$item['cust_phone']);
            $sheet->setCellValue("H{$rows}", " ".$item['orderStatus']);
            $sheet->setCellValue("I{$rows}", " ".$item['sale_num']);
            $sheet->setCellValue("J{$rows}", $item['salePrice']);
    
            $sheet->setCellValue("K{$rows}", $item['price']);
            $sheet->setCellValue("L{$rows}", " ".$item['unOutBatchNum'] );
            $sheet->setCellValue("M{$rows}", $item['unOutBatchPrice']);
            $sheet->setCellValue("N{$rows}", " ".$item['wms_order_sn']);
            $sheet->setCellValue("O{$rows}", " ".$item['outedTime']);
            $sheet->setCellValue("P{$rows}", " ".$item['note']);
    
            ++$rows;
        }
    
        ob_end_clean();
        header('pragma:public');
        header("Content-Disposition:attachment;filename=".$fileName.".xls");#attachment新窗口打印inline本窗口打印
        $objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
        $objWriter->save('php://output');
        exit;
    

      

  • 相关阅读:
    新的思考方式
    我在干售后!
    设计制造嵌入式系统
    镶嵌在系统中的系统
    苏黄永郦的第六周读书报告
    苏黄永郦的第五周读书报告
    苏黄永郦的第四周读书报告
    苏黄永郦的第三周读书报告
    1051 最大子矩阵和
    1065 最小正子段和
  • 原文地址:https://www.cnblogs.com/sanqiyi/p/6892772.html
Copyright © 2020-2023  润新知