<?php /** * 圆圈付费导出错误信息 * @author: 蔡建华 */ namespace Apicp\Controller\ImportUser; use Com\Cache; use Com\PythonExcel; class DownloadErrorController extends AbstractController { const MAX_ROWS = 1000; // 最多允许上传1000条数据 protected $_require_login = false; /** * DownloadError * * @author * @desc 导出错误信息 * * @param string cache_sign:true 缓存标识 * * @return void */ public function Index_get() { // 缓存标识 $cache_sign = I('get.cache_sign'); // 临时文件存放目录 $save_path = APP_PATH . 'Data'; if (!is_dir($save_path)) { mkdir($save_path, 0777); } if (empty($cache_sign)) { // 模板下载 // 缓存标识为空 $file_name = '导入人员信息模板.xls'; Vendor('PHPExcel.PHPExcel'); $excel = new \PHPExcel(); // 设置sheet标题 $excel->getActiveSheet()->setTitle('data'); //设置第一行数据 $excel->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true); $excel->getActiveSheet()->setCellValue('A1', "填写说明:\n 1,此表格表头不允许删除,系统将从第3行开始匹配人员;\n 2,系统将按照“姓名、手机号或邮箱”(三者必填其一)进行人员匹配,当有人员重名时,请务必填写手机号和邮箱,以免匹配错误。"); $excel->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $excel->getDefaultStyle()->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); // 合并单元格 $excel->getActiveSheet()->mergeCells('A1:I1'); // 设置行高 $excel->getActiveSheet()->getRowDimension('1')->setRowHeight(60); // 设置背景 $excel->getActiveSheet()->getStyle('A1:I1')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID); $excel->getActiveSheet()->getStyle('A1:I1')->getFill()->getStartColor()->setARGB('FFFACD'); $excel->getActiveSheet()->getStyle('A1')->getFont()->getColor()->setARGB(\PHPExcel_Style_Color::COLOR_WHITE); // 设置表头 $excel->getActiveSheet()->setCellValue('A2', "姓名"); $excel->getActiveSheet()->setCellValue('B2', "手机号"); $excel->getActiveSheet()->setCellValue('C2', "邮箱"); // 设置表头背景颜色 $excel->getActiveSheet()->getStyle('A2:I1')->getFont()->getColor()->setARGB('333333'); //输出到浏览器 header("Pragma: public"); header("Expires: 0"); header("Cache-Control:must-revalidate, post-check=0, pre-check=0"); header("Content-Type:application/force-download"); header("Content-Type:application/vnd.ms-execl"); header("Content-Type:application/download"); header('Content-Type:application/octet-stream'); $write = new \PHPExcel_Writer_Excel5($excel); ob_end_clean();//清除缓冲区,避免乱码 $encoded_filename = urlencode($file_name); $encoded_filename = str_replace("+", "%20", $encoded_filename); $ua = $_SERVER["HTTP_USER_AGENT"]; if (preg_match("/MSIE/", $ua)) { header('Content-Disposition: attachment; filename="' . $encoded_filename . '"'); } else { if (preg_match("/Firefox/", $ua)) { header('Content-Disposition: attachment; filename*="utf8\'\'' . $file_name . '"'); } else { header('Content-Disposition: attachment; filename="' . $file_name . '"'); } } header("Content-Transfer-Encoding:binary"); $write->save('php://output'); exit; } else { // 错误数据下载 $cache =& Cache::instance(); // 防止缓存不存在时出错 $error_list = []; try { $error_list = $cache->get('Common.Import_User_' . $cache_sign); } catch (\Think\Exception $e) { \Think\Log::record($e); } catch (\Exception $e) { \Think\Log::record($e); } // Excel 表头字段 $title = ['']; $rows = []; // 错误数据处理 foreach ($error_list as $v) { $value = [ $v['username'], $v['mobile'], $v['memEmail'], $v['error'], ]; $rows[] = $value; } array_unshift($rows, ['姓名', '手机号', '邮箱', '失败原因']); $file_name = '导入失败人员信息_' . NOW_TIME.'.xls'; } // 生成Excel 下载 $real_path = $save_path . D_S . $file_name; $ret = PythonExcel::instance()->write($real_path, $title, $rows); if ($ret) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $file_name); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($real_path)); readfile($real_path); } // 删除临时文件 unlink($real_path); return true; } }