PHPExcel 生成表格成功方法,thinkphp 使用 PHPExcel生成表格

1、生成效果

 

 

 

2、实现方法

/*
     * 我的采购列表  导出我分好的材料分组数据
     * excel 表格
     * $cg_id = 采购id 如果只传采购id代表将我的所有分组下的材料导出
     * */
    public function cailiao_fenzu_excel(){
        if(!IS_POST)$this->error('访问错误',U('Index/index'));//使用post
        $cg_id = I('cg_id');
        $fz_id = I('fz_id');
        if(!$cg_id)$this->error('未获取到采购ID');
        $user = session('uid');
        if(!$user['uid'])$this->error('请先登录',U('User/login'));
        if(!$fz_id){
            //生成表格需要的排版结构
            $conf = array(
                'xuhao' => '序号',
                'id' => 'ID',
                'title' => '设备名称',
                'guige' => '尺寸/型号/规格',
                'cz_title' => '材质',
                'dw_title' => '单位',
                'xuyao_num' => '数量',
                'des' => '备注',
                'fujian_title' => '附件',
                'daohuo_time' => "到货日期",
                'zhongliang' => '重量',
                'danjia' => '单价',
                'money' => '金额'
            );
            $headArr = array_values($conf);
            $dataHeader = array_keys($conf);

            $fj_name = '2020414钢铁采购单';//生成的文件名
            $xls = '(1).xls';//文件号
            $fileName[0] = $fj_name;//生成的文件名
            $fileName[1] = $fj_name.$xls;
            $newData = $r['cailiao_list']['list'];//要生成的数据  与$conf数据顺序结果一致
            self::dataExportOut($headArr, $newData, $dataHeader, $fileName);//生成excel表格

        }


}

 

 

/**
     * 根据相关数据  导出表格
     */
    protected function dataExportOut($headArr, $newData, $dataHeader, $fileName){
        vendor("PHPExcel.PHPExcel");
        $objPHPExcel = new \PHPExcel();
        $objPHPExcel->getProperties();
        $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(12);// 设置默认字体大小
        $objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(28);//所有单元格(行)默认高度
        $objPHPExcel->getActiveSheet()->getDefaultColumnDimension()->setWidth(17);//所有单元格(列)默认宽度
        $objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//所有单元格文字居中
        $objPHPExcel->getDefaultStyle()->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);//所有单元格文字垂直居中
        $objPHPExcel->getActiveSheet()->getStyle('A:Z')->getAlignment()->setWrapText(TRUE);// A 到 Z 行,字符串自动换行,不会撑开单元格高度  不影响其他的设置
        //自定义标题   (第一列)
        $title = $fileName[0];//标题
        $objPHPExcel->getActiveSheet()->mergeCells('A1:M1');//合并单元格
        $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(40);//设置行高度   设置第一列
        $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(18);//设置文字大小  设置第一列
        $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);//设置是否加粗
        $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//设置文字居左(HORIZONTAL_LEFT,默认值)中(HORIZONTAL_CENTER)右(HORIZONTAL_RIGHT)
        $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue(A . '1', $title);//标题
        //自定义供应商基本信息,表头   (第二列)
        $objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(28);//设置行高度
        $objPHPExcel->getActiveSheet()->getStyle('2')->getFont()->setBold(true);//设置是否加粗  给第2列加粗
        $objPHPExcel->getActiveSheet()->mergeCells('A2:C2');//合并单元格
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue(A . '2', '公司全称');//标题
        $objPHPExcel->getActiveSheet()->mergeCells('D2:F2');//合并单元格
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue(D . '2', '公司地址(省-市-区-详细地址)');//标题
        $objPHPExcel->getActiveSheet()->mergeCells('G2:I2');//合并单元格
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue(G . '2', '联系人');//标题
        $objPHPExcel->getActiveSheet()->mergeCells('J2:L2');//合并单元格
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue(J . '2', '联系电话');//标题
        //根据需求 合并第三列单元格    (第三列)
        $objPHPExcel->getActiveSheet()->mergeCells('A3:C3');//合并单元格
        $objPHPExcel->getActiveSheet()->mergeCells('D3:F3');//合并单元格
        $objPHPExcel->getActiveSheet()->mergeCells('G3:I3');//合并单元格
        $objPHPExcel->getActiveSheet()->mergeCells('J3:L3');//合并单元格

        // 设置表头   (第4列)
        $objPHPExcel->getActiveSheet()->getRowDimension('4')->setRowHeight(28);//设置行高度
        $objPHPExcel->getActiveSheet()->getStyle('4')->getFont()->setBold(true);//设置是否加粗  给第4列加粗
        $key = ord("A");
        foreach ($headArr as $v) {
            $colum = chr($key);
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '4', $v);
            $key += 1;
        }
        //内容  (第5列开始)
        if($newData){
            $column = 5;
            $objActSheet = $objPHPExcel->getActiveSheet();
            foreach ($newData as $key => $rows) { // 行写入
                $span = ord("A");
                foreach ($rows as $keyName => $value) { // 列写入
                    foreach ($dataHeader as $head) {
                        if ($head == $keyName) {
                 //如果有附件就让此单元格字体为红色
                            $val = chr($span).$column;
                            if($head == 'fujian_title' && $value != '无'){
                                $objPHPExcel -> getActiveSheet() -> getStyle($val) -> getFont()->getColor()->setRGB('FF0000');// 设置单元格字体颜色
                            }
                            //如果有材料画像表,就附上链接,
                            if($head == 'jianli_mima' && $value != '无'){
                                $url_val = 'https://baidu.com/?s'.$value;//密钥
                                $objPHPExcel -> getActiveSheet() -> getStyle($val) -> getFont()->getColor()->setRGB('800080');// 设置单元格字体颜色
                                $objPHPExcel->getActiveSheet()->getStyle($val)->getFont()->setUnderline(\PHPExcel_Style_Font::UNDERLINE_SINGLE);//设置下划线
                                $objActSheet->getCell($val)->getHyperlink()->setUrl($url_val);//超链接url地址
                                $value = '查看画像表';
                            }
                 $objActSheet->setCellValue($val, $value);
                            $span++;
                        }
                    }
                }
                $column++;
            }
        }

        //方法一  直接下载
        /*$fileName_1 = iconv("utf-8", "gb2312", $fileName[1]); // 重命名表
        $objPHPExcel->setActiveSheetIndex(0); // 设置活动单指数到第一个表,所以Excel打开这是第一个表
        ob_end_clean();
        ob_start();
        header('Content-Type: application/vnd.ms-excel;charset=UTF-8');
        header("Content-Disposition: attachment;filename='$fileName_1'");
        header('Cache-Control: max-age=0');*/
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        //$objWriter->save('php://output'); // 文件通过浏览器下载
        //方法二
        //将文件保存到服务器目录下
        $fj_name = $_SERVER['DOCUMENT_ROOT'].'/Uploads/baojia_excel/'.$fileName[1];
        $objWriter->save($fj_name);
        return 1;
    }

 

posted @ 2020-04-14 08:42  遇事稳坐钓鱼台  阅读(860)  评论(0编辑  收藏  举报