DownloadErrorController.class.php
5.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?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;
}
}