下次用就可以直接粘代码了
上一次用是在tp5.0
/**
* PHPExcel 导出
*
* @param array $field 表格第一行的表格 格式:['name'=>'名字','数据库字段名1'=>'显示的名称1',...]
* @param array $list 数据 格式: 二维数组,第一层键为数字,第二层键为字段名
* @param string $title 导出的文件名称
*/
public function phpExcelList($field, $list, $title = '文件')
{
// 将标题转码
iconv('utf-8', 'gbk', $title);
// 引入 等价于 PHPExcel/PHPExcel
vendor("PHPExcel.PHPExcel");
$objPHPExcel = new \PHPExcel();
$objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel); //设置保存版本格式
$objPHPExcel->setActiveSheetIndex(0);
// 列标 有几列就设几个
$columns = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M'];
// 每列的宽度 长度对应列标
$width = [30, 10, 12, 12, 20, 15, 15, 20, 13, 16, 30, 13, 15];
// 设置列宽
foreach ($columns as $k => $v) {
$objPHPExcel->getActiveSheet()->getColumnDimension($v)->setWidth($width[$k]);
}
// 设置表格第一行显示内容
$i = 0;
foreach ($field as $k => $v) {
$objPHPExcel->getActiveSheet()->setCellValue($columns[$i] . '1', $v);
$i++;
}
// 填充数据
/**
* 可以写成以下格式
* $objPHPExcel->getActiveSheet()->setCellValue('A2',$v['name])
* ->setCellValue(单元格,要写入的数据);
* 表头同理
*/
$column_keys = array_keys($field);
foreach ($list as $k => $v) {
$j = 0;
foreach ($v as $key => $val) {
// 加 \t 是为了防止长数字显示科学记数法
$objPHPExcel->getActiveSheet()->setCellValue($columns[$j] . ($k + 2), "\t".$v[$column_keys[$j]]."\t");
$j++;
// 避免出现下标不存在
if ($j == count($column_keys)) {
break;
}
}
}
// 防乱码
ob_end_clean();
header('Content-Type: application/vnd.ms-excel;charset=utf-8'); //文件类型,字符编码
header('Content-Disposition: attachment;filename="' . $title . '.xls"'); //文件名
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //excel 2003
// 浏览器输出
$objWriter->save('php://output');
exit;
}