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; }