1.前台问题
请使用使用from提交方式不要用ajax提交方式贴出我前台代码
敲黑板一定要在body里面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<input type="button" value="导出表格" class="loginbtn" id="btnLogin"/>
<script type="text/javascript" src="__STATIC__/login/js/jquery.min.js"></script>
<script>
$("#btnLogin").click(function () {
var url='/index/tool/excleDemo.html';
var form = $('<form id="form" method="POST" action="' + url + '">');
$('body').append(form);
form.submit().remove(); //自动提交
});
</script>
</body>
</html>
1.后台问题
出现白页90%都是后台出错;
请 try catch抛出异常 解除报错之后不会出现白页
错误等级 error_reporting=E_ALL & ~E_NOTICE
在php.ini 打开 贴出后台代码
/请求
<?php
namespace app\index\controller;
use think\facade\Request;
use think\Controller;
use phpexcel\Classes;
//工具类
class Tool extends Controller
{
//请求
protected $request;
//导出最大数量 超出该数量则新开一个工作簿
protected $exclePageSize = 3000 ;
protected $excleColumn = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
protected function _initialize(Request $request)
{
$this->request = $request;
}
/**
* 导出excle demo
*/
public function excleDemo()
{
$list = [
[
'name'=>'李维山',
'sex'=>'男',
'age'=>'18',
'content'=>'备注'
],
[
'name'=>'李维山2',
'sex'=>'男',
'age'=>'18',
'content'=>'备注'
],
[
'name'=>'李维山3',
'sex'=>'男',
'age'=>'18',
'content'=>'备注'
]
];
$flagarr = [
['姓名','name'],
['性别','sex'],
['年龄','age'],
['说明','content']
];
$fileName = '商品表_' .date('Ymd');
$sheetNmae = '商品表';
$this->excleOut($list,$flagarr,$fileName,$sheetNmae);
}
/**
* 导出excle
* @param array $list 数据(二维数组)
* @param array $flagarr 表头-字段标识
* @param string $filename 保存文件名
* @param string $sheetNmae 工作簿名字
* @param string $headcolor 表头背景色
* @param string $head_fontcolor 表头文字颜色
* @param path composer require phpoffice/phpexcel ; use phpexcel\Classes;
*/
public function excleOut($list,$flagarr,$filename,$sheetNmae,$head_fontcolor='ff0000', $headcolor='0070C0')
{
try{
$objPHPExcel = new \PHPExcel();
$i=ceil(count($list)/$this->exclePageSize);
$excleColumn = $this->excleColumn;
$num=0;
while($i>0){
if($num>0) $objPHPExcel->createSheet();
$objPHPExcel->setactivesheetindex($num);//第几个工作簿
$objPHPExcel->getActiveSheet()->setTitle($sheetNmae);//工作簿的名字
$head_scope = $excleColumn[0].'1:'.$excleColumn[count($flagarr)-1].'1'; //表头范围 如:a1:f1
//设置表头
foreach ($flagarr as $k => $v){
//设置表头
$objPHPExcel->getActiveSheet()->setCellValue($excleColumn[$k].'1',$v[0]);
//设置自适应宽度
//$objPHPExcel->getActiveSheet()->getColumnDimension($excleColumn[$k])->setAutoSize(true);
}
//追加内容
foreach ($list as $k=>$v){
if($k<$this->exclePageSize){
$j = $k + 2;
foreach ($flagarr as $kk => $vv){
//$objPHPExcel->getActiveSheet()->getColumnDimension($excleColumn[$kk])->setAutoSize(true); //设置宽度
$objPHPExcel->getActiveSheet()->getStyle($excleColumn[$kk])->getFont()->setBold(true);
//$objPHPExcel->getActiveSheet()->setCellValue($excleColumn[$kk].$j,' '.$list[$k][$vv[1]]); //前面加空格 防止数字文本被转换为科学计数法
$objPHPExcel->getActiveSheet()->setCellValue($excleColumn[$kk].$j,$list[$k][$vv[1]]);
}
unset($list[$k]);
}else{ break; }
}
//保护
//$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
//设置表头背景色
$objPHPExcel->getActiveSheet()->getStyle($head_scope)->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
$objPHPExcel->getActiveSheet()->getStyle($head_scope)->getFill()->getStartColor()->setARGB($headcolor);
//设置表头文字颜色
$styleArray = array(
'font' => array(
'color' => array('rgb' => $head_fontcolor),
));
$objPHPExcel->getActiveSheet()->getStyle($head_scope)->applyFromArray($styleArray);
//设置页方向和规模
$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(\PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT);
$objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(\PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
$objPHPExcel->setActiveSheetIndex(0);
$timestamp = time();
$num++;
$i--;
$list=array_values($list);
}
ob_end_clean();
$obwrite = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
//保存文件
$obwrite->save();
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/octet-stream');
header('Content-Type:application/download');
header("Content-Disposition:attachment;filename=$filename.xls");
header('Content-Transfer-Encoding:binary');
$obwrite->save('php://output');
} catch (\Exception $e) {
exit(json_encode(array('status'=>-1,'msg'=>$e->getMessage())));
}
}
}