PHP 之tp5导出到Excel并下载

一、代码

    public function export($month)
    {
        $year = date("Y", time());
        //要导出的数据
        $data =array();
        $day_number = date("t", strtotime($year."-".$month));

        vendor('PHPExcel.PHPExcel');
        ini_set('max_execution_time', 0);

        $objPHPExcel = new PHPExcel();
        //设置excel列名
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', '姓名');
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B1', '午餐');
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C1', '晚餐');
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D1', '总数');

        //设置列宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(10);
        $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(10);
        $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(10);

        for($i = 1; $i <= $day_number; $i++){
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($this->cell[$i+3].'1', $i.'日');
            $objPHPExcel->getActiveSheet()->getColumnDimension($this->cell[$i+3])->setWidth(20);
        }
        //设置第一行高度
        $objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(20);

        //垂直居中,
        $objPHPExcel->getActiveSheet()->getStyle('A2:A'.(count($data)+1))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
        //水平居左
        $objPHPExcel->getActiveSheet()->getStyle('A2:A'.(count($data)+1))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
        //垂直居中
        $objPHPExcel->getActiveSheet()->getStyle('B2:B'.(count($data)+1))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('B2:B'.(count($data)+1))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
        $objPHPExcel->getActiveSheet()->getStyle('C2:C'.(count($data)+1))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('C2:C'.(count($data)+1))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
        $objPHPExcel->getActiveSheet()->getStyle('D2:D'.(count($data)+1))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('D2:D'.(count($data)+1))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
        foreach ($data as $k => $v){
            //获取午餐总次数,这里获取数据
            $zhong_count = 0;
            //获取晚餐次数,这里获取数据
            $wan_count = 0;
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A' . ($k + 2), $v['name']);
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B' . ($k + 2), $zhong_count);
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C' . ($k + 2), $wan_count);
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D' . ($k + 2), $zhong_count + $wan_count);
            for($i = 1; $i <= $day_number; $i++){
                //设置换行
                $objPHPExcel->getActiveSheet()->getStyle($this->cell[$i+3])->getAlignment()->setWrapText(true);
                $food_ = Model("qyweixin_food")->where("year='$year' and month='$month' and user_id='{$v['userid']}' and day='$i'")->find();
                $objPHPExcel->setActiveSheetIndex(0)->setCellValue($this->cell[$i+3].($k+2), "午:".$food_['zhong'].PHP_EOL."晚:".$food_['wan']);

                $objPHPExcel->getActiveSheet()->getStyle($this->cell[$i+3].'2:'.$this->cell[$i+3].(count($data)+1))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
            }
            $objPHPExcel->getActiveSheet()->getRowDimension($k+2)->setRowHeight(40);
        }

        $title = $year.'年'.$month.'月报餐统计表';
        $objPHPExcel->getActiveSheet()->setTitle($title);
        $objPHPExcel->setActiveSheetIndex(0);
        header('Content-Type: application/vnd.ms-excel');
        header("Content-Disposition: attachment;filename=$title.xls");
        header('Cache-Control: max-age=0');
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
    }
原文地址:https://www.cnblogs.com/yang-2018/p/15341494.html