• 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) {
                                //如果有附件就让此单元格字体为红色
                                if($head == 'fujian_title' && $value != '无'){
                                    $val = chr($span).$column;
                                    $objPHPExcel -> getActiveSheet() -> getStyle($val) -> getFont()->getColor()->setRGB('FF0000');// 设置单元格字体颜色
                                }
                                $objActSheet->setCellValue(chr($span) . $column, $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;
        }
  • 相关阅读:
    再叙存储设备
    分布式文件系统---测试
    分布式文件系统
    Solr 分布式(复制)配置--成功验证
    搜索服务之离线处理思路
    我为公司做的总体架构,欢迎提建议
    python的面向对象
    python异常处理
    迭代器和生成器
    python函数
  • 原文地址:https://www.cnblogs.com/zc290987034/p/12695631.html
Copyright © 2020-2023  润新知