表格导出

日期:2019-04-07 浏览:316次
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
//表格导出
public function sign_excel()
{
if($this->request->isPost()) {
$ids = $this->request->param('ids/s');
$map = [];
$map['appid'] = USER_APPID;
$map['id'] = ['in', $ids];
if(!empty($ids))
{
$rows = Db::name('signs_statistics')
-> where($map)
->field('appid,openid,uname,first_time,end_time,count_signs,days,hight,count_points')
->select();
$cellTtile = [
['appid', '公众号id', 30],
['openid', '粉丝id', 30],
['first_time', '首次签到时间', 20],
['end_time', '最后签到时间', 20],
['count_signs', '累积签到次数', 20],
['days', '连续签到次数', 20],
['hight', '最高连续签到时间', 20],
['count_points', '签到获取积分', 20],
];
$title = '签到详情_'; // 标题
// 调用导出函数
excel_export($rows, $title, $cellTtile, 'xlsx');
}
}
}
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
/**
* Excel导出功能封装
* @param  array $rows         数据源
* @param  string $title       表格标题
* @param  array $cellTtile    列名
* @param  string $ext         导出格式 xls 或 xlsx
* @param  array $wrapText     需自动换行字段
* @param  boolean $isProtect  是否保护表
* @param  array $protectCells 非保护字段,$isProtect = true时才给
* @return [type]              [description]
*/
function excel_export($rows, $title, $cellTtile, $ext = 'xls', $wrapText = [], $isProtect = false, $protectCells = [])
{
\think\Loader::import('PHPExcel.PHPExcel');
$objPHPExcel = new \PHPExcel();
$workSheet = $objPHPExcel->getActiveSheet(); //获得当前活动sheet的操作对象
$workSheet->setTitle($title); //给当前活动sheet设置名称
$cellName = [ // 列名
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH',
'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW',
'AX', 'AY', 'AZ'
];
$cellNum = count($cellTtile); // 列数
$dataNum = count($rows); // 行数
for($i = 0; $i < $cellNum; $i++){ // 标题行 $workSheet->getColumnDimension($cellName[$i])->setWidth($cellTtile[$i][2]); // 设置列宽
$workSheet->setCellValue($cellName[$i] . '1', $cellTtile[$i][1]); // 设置值
}
$workSheet->getDefaultRowDimension()->setRowHeight(35); // 默认行高
$workSheet->getStyle('A1:' . $cellName[$cellNum - 1] .'1')->getFont()->setSize(12); // 字体大小
if($isProtect) { // 是否保护单元格
$workSheet->getProtection()->setSheet(true); // 为了使任何表保护,需设置为真
}
$styleArray = [  // 全局设置
'alignment' => [
'horizontal' => \PHPExcel_Style_Alignment::HORIZONTAL_LEFT, // 水平居左
'vertical'   => \PHPExcel_Style_Alignment::VERTICAL_CENTER  // 垂直居中
],
'borders' => [
'allborders' => [
'style' => \PHPExcel_Style_Border::BORDER_THIN,//细边框
'color' => ['argb' => 'FF808080']
]
]
];
$workSheet->getStyle('A1:' . $cellName[$cellNum - 1] . ($dataNum + 1))->applyFromArray($styleArray);
for($i = 0; $i < $dataNum; $i++){
for($j = 0; $j < $cellNum; $j++){ $workSheet->setCellValue($cellName[$j] . ($i + 2), $rows[$i][$cellTtile[$j][0]]);
if($isProtect && $protectCells) { // 受保护的列
if (!in_array($cellTtile[$j][0], $protectCells)) {
$workSheet->protectCells($cellName[$j] . ($i + 2), '000000'); // 密码000000
//取得当前行数和列数,然后取消中间部分的单元格保护
$workSheet->getStyle($cellName[$j] . ($i + 2))->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
$workSheet->getStyle($cellName[$j] . ($i + 2))->getFill()->getStartColor()->setRGB('f0f0f0');
} else {
$workSheet->getStyle($cellName[$j] . ($i + 2))->getProtection()->setLocked(\PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);
}
}
// 需要自动换行的列
if(in_array($cellTtile[$j][0], $wrapText)) {
$workSheet->getStyle($cellName[$j] . ($i + 2))->getAlignment()->setWrapText(true);
}
}
}
ob_end_clean();  //清除缓冲区,避免乱码
switch ($ext) {
case 'xlsx':
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Type: text/html; charset=utf-8'); //编码
$format = 'Excel2007';
break;
case 'csv':
header('Content-Type:application/vnd.ms-excel');
header('Content-Type: text/csv; charset=utf-8'); //编码
$format = 'CSV';
break;
case 'pdf':
header('Content-Type: application/pdf');
$format = 'PDF';
break;
default:
header('Content-Type:application/vnd.ms-excel');
header('Content-Type: text/html; charset=utf-8'); //编码
$format = 'Excel5';
break;
}
$filename = $title . date('Ymd') . '.' .  $ext;
header('Content-Disposition: attachment;filename="' . $filename); //文件名
header('Cache-Control: max-age=0');
header('Expires:0');
header('Pragma:public');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, $format);
if($ext == 'csv' || $ext == 'pdf') {
$objWriter->setFont('arialunicid0-chinese-simplified'); //这个很重要, 要不中文全是??
}
$objWriter->save('php://output');
exit;
}

插件地址:
PHPExcel

没有评论

发表评论